1 IDENTIFICACIÓN Y JUSTIFICACIÓN DE LA VARIABLE

\(Variable\) \(de\) \(Estudio\): Pendiente del Terreno (°).

Se determina que esta variable es Cuantitativa Continua. La inclinación condiciona directamente la viabilidad topográfica y el costo de la obra civil del proyecto. Debido a la alta concentración de datos en relieves de baja inclinación, se opta por una Estrategia de Segmentación y Ajuste Exponencial:

\(Fase\) \(de\) \(Segmentación\): Se aisló el segmento de mayor acumulación (comprendido entre \(0.00\) y \(8.671\%\)), eliminando el ruido de los valores extremos para revelar el comportamiento real de las pendientes más frecuentes.

\(Modelo\) \(Aceptado\): Distribución Exponencial (Validado exitosamente mediante el Test de Pearson y la Prueba Chi-cuadrado \(\chi^2\). El modelo captura con alta precisión el decaimiento natural de la disponibilidad de terrenos a medida que aumenta la inclinación, garantizando un análisis físico confiable).

2 CARGA DE DATOS Y LIBRERÍAS

Importamos el archivo “Dataset_Mundial_Final.xls” desde una ruta local y lo almacenamos en el objeto Datos.

suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(readxl))

Datos <- read_excel("C:/Users/ASUS/OneDrive/Escritorio/ESTADÍSTICA/EXPO/ACTIVIDADES/Dataset_Mundial_Final.xls", 
                    sheet = "Dataset_Mundial_Final")

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 ...

3 EXTRAER VARIABLE

Extraemos la variable de curvatura (curvature), omitimos las celdas en blanco y verificamos el tamaño muestral.

slope <- na.omit(Datos$slope)
slope <- slope[slope > 0]
n_total <- length(slope)

4 TABLA DE DISTRIBUCIÓN DE FRECUENCIA

La tabla de frecuencias de la Pendiente se organizó mediante la regla de Sturges para definir el número de intervalos óptimo. El ancho de clase se ajustó al rango total de los datos, permitiendo una clasificación sistemática y precisa de la inclinación del terreno y la variabilidad del relieve en la muestra.

suppressPackageStartupMessages({
  library(gt)
  library(dplyr)
})

slope_global <- na.omit(Datos$slope) 
n_total <- length(slope_global)

K_slope <- floor(1 + 3.322 * log10(n_total))
min_abs <- min(slope_global)
max_abs <- max(slope_global)

breaks_slope <- seq(min_abs, max_abs, length.out = K_slope + 1)
lim_inf_s <- breaks_slope[1:K_slope]
lim_sup_s <- breaks_slope[2:(K_slope+1)]
MC_s <- (lim_inf_s + lim_sup_s) / 2

ni_s <- as.vector(table(cut(slope_global, breaks = breaks_slope, right = FALSE, include.lowest = TRUE)))
hi_s <- (ni_s / n_total) * 100 

df_temp <- data.frame(
  Li = lim_inf_s, 
  Ls = lim_sup_s,
  MC = MC_s,
  ni = ni_s,
  hi = hi_s
)

primera_con_datos <- min(which(df_temp$ni > 0))
ultima_con_datos  <- max(which(df_temp$ni > 0))
df_tabla_final <- df_temp[primera_con_datos:ultima_con_datos, ]

df_tabla_final %>%
  gt() %>%
  tab_header(
    title = md("**TABLA N\u00ba 1: DISTRIBUCI\u00d3N DE FRECUENCIAS DE PENDIENTE**"),
  ) %>%
  cols_label(
    Li = "Lim. Inf", 
    Ls = "Lim. Sup", 
    MC = "Marca Clase (Xi)",
    ni = "ni", 
    hi = "hi (%)"
  ) %>%
  fmt_number(columns = c(Li, Ls, MC), decimals = 3) %>%
  fmt_number(columns = hi, decimals = 2) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_style(
    style = list(cell_fill(color = "#F2F2F2"), cell_text(weight = "bold", color = "#333333")),
    locations = cells_column_labels()
  ) %>%
  tab_options(
    table.width = pct(100),
    data_row.padding = px(5),
    table.border.top.style = "solid",
    table.border.top.color = "black",
    table.border.bottom.style = "solid",
    table.border.bottom.color = "black"
  )
TABLA Nº 1: DISTRIBUCIÓN DE FRECUENCIAS DE PENDIENTE
Lim. Inf Lim. Sup Marca Clase (Xi) ni hi (%)
0.000 2.168 1.084 47810 81.06
2.168 4.335 3.251 6545 11.10
4.335 6.503 5.419 2375 4.03
6.503 8.671 7.587 1059 1.80
8.671 10.838 9.754 577 0.98
10.838 13.006 11.922 259 0.44
13.006 15.173 14.090 140 0.24
15.173 17.341 16.257 83 0.14
17.341 19.509 18.425 50 0.08
19.509 21.676 20.592 25 0.04
21.676 23.844 22.760 24 0.04
23.844 26.012 24.928 11 0.02
26.012 28.179 27.095 14 0.02
28.179 30.347 29.263 3 0.01
30.347 32.514 31.431 1 0.00
32.514 34.682 33.598 2 0.00

4.1 NUEVA TABLA DE DISTRIBUCIÓN DE FRECUENCIA

Se segmentó la Pendiente en el rango de mayor densidad (\(0.00\) a \(8.671\)) para aplicar la regla de Sturges sobre un subconjunto más homogéneo. Este ajuste eliminó la distorsión de los relieves extremos, aumentando la resolución estadística y facilitando la ubicación de las zonas más aptas para la infraestructura.

suppressPackageStartupMessages({
  library(gt)
  library(dplyr)
})

slope_global <- na.omit(Datos$slope)
slope_filtrada <- slope_global[slope_global >= 0.00 & slope_global <= 8.671]
n_total <- length(slope_filtrada)

K_slope <- floor(1 + 3.322 * log10(n_total))
min_abs <- 0.00
max_abs <- 8.671

breaks_slope <- seq(min_abs, max_abs, length.out = K_slope + 1)
lim_inf_s <- breaks_slope[1:K_slope]
lim_sup_s <- breaks_slope[2:(K_slope+1)]
MC_s <- (lim_inf_s + lim_sup_s) / 2

ni_s <- as.vector(table(cut(slope_filtrada, breaks = breaks_slope, right = FALSE, include.lowest = TRUE)))
hi_s <- (ni_s / n_total) * 100 

df_temp <- data.frame(
  Li = lim_inf_s, 
  Ls = lim_sup_s,
  MC = MC_s,
  ni = ni_s,
  hi = hi_s
)

df_temp %>%
  gt() %>%
  tab_header(
    title = md("**TABLA N\u00ba 2: DISTRIBUCI\u00d3N DE FRECUENCIAS DE PENDIENTE**"),
  ) %>%
  cols_label(
    Li = "Lim. Inf", 
    Ls = "Lim. Sup", 
    MC = "Marca Clase (Xi)",
    ni = "ni", 
    hi = "hi (%)"
  ) %>%
  fmt_number(columns = c(Li, Ls, MC), decimals = 3) %>%
  fmt_number(columns = hi, decimals = 2) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_style(
    style = list(cell_fill(color = "#F2F2F2"), cell_text(weight = "bold", color = "#333333")),
    locations = cells_column_labels()
  ) %>%
  tab_options(
    table.width = pct(100),
    data_row.padding = px(5),
    table.border.top.style = "solid",
    table.border.top.color = "black",
    table.border.bottom.style = "solid",
    table.border.bottom.color = "black"
  )
TABLA Nº 2: DISTRIBUCIÓN DE FRECUENCIAS DE PENDIENTE
Lim. Inf Lim. Sup Marca Clase (Xi) ni hi (%)
0.000 0.542 0.271 25870 44.77
0.542 1.084 0.813 11723 20.29
1.084 1.626 1.355 6374 11.03
1.626 2.168 1.897 3843 6.65
2.168 2.710 2.439 2509 4.34
2.710 3.252 2.981 1765 3.05
3.252 3.794 3.523 1276 2.21
3.794 4.335 4.065 995 1.72
4.335 4.877 4.606 764 1.32
4.877 5.419 5.148 659 1.14
5.419 5.961 5.690 522 0.90
5.961 6.503 6.232 430 0.74
6.503 7.045 6.774 314 0.54
7.045 7.587 7.316 313 0.54
7.587 8.129 7.858 232 0.40
8.129 8.671 8.400 200 0.35

5 ANÁLISIS GRÁFICO

Este histograma permite visualizar intuitivamente dónde se concentran las pendientes del terreno, revelando la forma y el sesgo de la distribución. Esta claridad gráfica ayuda a prever la complejidad del movimiento de tierras y valida que el modelo matemático elegido se ajusta correctamente a la realidad del relieve.

5.1 HISTOGRAMA DE FRECUENCIA

slope_completa <- na.omit(Datos$slope)

slope_segmento <- slope_completa[slope_completa >= 0.00 & slope_completa <= 8.671]
n_seg <- length(slope_segmento) 

K_sturges <- floor(1 + 3.322 * log10(n_seg))
cortes_seg <- seq(0.00, 8.671, length.out = K_sturges + 1)

par(mar = c(6, 5, 4, 2))
h_slope_seg <- hist(slope_segmento, breaks = cortes_seg, plot = FALSE, right = FALSE)

h_slope_seg$counts <- (h_slope_seg$counts / n_seg) * 100

plot(h_slope_seg, 
     main = "Gr\u00e1fica N\u00ba 1: Distribuci\u00f3n de Frecuencias de Pendiente",
     xlab = "Pendiente del Terreno (°)", 
     ylab = "Porcentaje (%)",
     col = "#B0C4DE", 
     border = "white", 
     axes = FALSE,
     ylim = c(0, max(h_slope_seg$counts) * 1.2))

axis(2, las = 2, cex.axis = 0.7)
axis(1, at = cortes_seg, labels = sprintf("%.3f", cortes_seg), las = 2, cex.axis = 0.6)

grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")

legend("topright", 
       legend = "Datos Emp\u00edricos", 
       fill = "#B0C4DE", 
       border = "white", 
       bty = "n", 
       cex = 0.8)

invisible()

6 JUSTIFICACIÓN Y ESTRATIFICACIÓN DEL MODELO

Para ganar precisión, se estratificó la curvatura en su rango más denso (\(-0.035\) a \(0.049\)), permitiendo que el modelo t-Student se ajuste mejor a los datos centrales. Estas conjeturas, validadas con pruebas de bondad de ajuste, garantizan un análisis geomorfológico sólido y técnicamente confiable.

suppressPackageStartupMessages(library(MASS))

slope_completa <- na.omit(Datos$slope)
n_total_global <- length(slope_completa)
slope_segmento <- slope_completa[slope_completa >= 0.00 & slope_completa <= 8.671]
n_seg <- length(slope_segmento)

ajuste_e <- suppressWarnings(fitdistr(slope_segmento, "exponential"))
rate_e <- ajuste_e$estimate["rate"]

K_sturges <- floor(1 + 3.322 * log10(n_seg))
cortes_seg <- seq(0.00, 8.671, length.out = K_sturges + 1)

par(mar = c(8, 5, 4, 2)) 

h_slope_seg <- hist(slope_segmento, breaks = cortes_seg, plot = FALSE, right = FALSE)
h_slope_seg$counts <- (h_slope_seg$counts / n_total_global) * 100

plot(h_slope_seg, 
     main = "Gr\u00e1fica N\u00ba 2: Distribuci\u00f3n de Frecuencias de Pendiente",
     xlab = "", 
     ylab = "Porcentaje (%)",
     col = "#B0C4DE", border = "white", axes = FALSE,
     ylim = c(0, max(h_slope_seg$counts) * 1.3))

mtext("Pendiente del Terreno (°)", side = 1, line = 6, cex = 0.8)

x_curva <- seq(0.00, 8.671, length.out = 300)
y_densidad <- dexp(x_curva, rate = rate_e)
ancho_barra <- cortes_seg[2] - cortes_seg[1]
y_curva_hi <- y_densidad * ancho_barra * 100 * (n_seg / n_total_global)
lines(x_curva, y_curva_hi, col = "#C0392B", lwd = 4)

axis(2, las = 2, cex.axis = 0.7)
axis(1, at = cortes_seg, labels = sprintf("%.3f", cortes_seg), las = 2, cex.axis = 0.6)

grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")

legend("topright", 
       legend = c("Datos Emp\u00edricos", "Modelo Exponencial"), 
       col = c("#B0C4DE", "#C0392B"), lwd = c(8, 4), bty = "n", cex = 0.8)

invisible()

6.1 TEST DE PEARSON Y CHI-CUDRADO

K_val <- length(cortes_seg) - 1
probs_e <- numeric(K_val)

for(i in 1:K_val) {
  probs_e[i] <- pexp(cortes_seg[i+1], rate = rate_e) - 
                pexp(cortes_seg[i], rate = rate_e)
}

probs_e <- probs_e / sum(probs_e)
n_base  <- 100

Fo_c <- as.vector(table(cut(slope_segmento, breaks = cortes_seg, right = FALSE))) * (n_base / n_seg)
Fe_c <- probs_e * n_base

chi_calc <- sum((Fo_c - Fe_c)^2 / Fe_c)
chi_crit <- qchisq(0.99, max(1, K_val - 1 - 1)) 

resultado_chi <- if(chi_calc < chi_crit) "APROBADO" else "RECHAZADO"

pearson_val <- cor(Fo_c, Fe_c) * 100

cat("\n--- RESULTADOS DE VALIDACI\u00d3N PENDIENTE (SLOPE) ---\n")
## 
## --- RESULTADOS DE VALIDACIÓN PENDIENTE (SLOPE) ---
cat("Modelo: Exponencial | Rango: 0.00 a 8.671\n")
## Modelo: Exponencial | Rango: 0.00 a 8.671
cat("Prueba Chi-cuadrado:", resultado_chi, "\n")
## Prueba Chi-cuadrado: APROBADO
cat("Chi-calculado:", round(chi_calc, 2), "| Chi-cr\u00edtico:", round(chi_crit, 2), "\n")
## Chi-calculado: 12.48 | Chi-crítico: 29.14
cat("Correlaci\u00f3n de Pearson:", round(pearson_val, 2), "%\n")
## Correlación de Pearson: 97.49 %

7 TABLA DE RESUMEN DE BONDAD DE AJUSTE

library(knitr)
suppressPackageStartupMessages(library(MASS))

slope_seg <- na.omit(Datos$slope[Datos$slope >= 0.00 & Datos$slope <= 8.671])
n_seg <- length(slope_seg)

ajuste_e <- suppressWarnings(
  fitdistr(slope_seg, "exponential")
)
rate_e <- ajuste_e$estimate["rate"]

K_val <- floor(1 + 3.322 * log10(n_seg))
cortes_seg <- seq(0.00, 8.671, length.out = K_val + 1)

probs_e <- numeric(K_val)
for(i in 1:K_val) {
  probs_e[i] <- pexp(cortes_seg[i+1], rate = rate_e) - pexp(cortes_seg[i], rate = rate_e)
}
probs_e <- probs_e / sum(probs_e)

Fo_c <- as.vector(table(cut(slope_seg, breaks = cortes_seg, right = FALSE))) * (100 / n_seg)
Fe_c <- probs_e * 100

pear_c <- cor(Fo_c, Fe_c) * 100
chi_c  <- sum((Fo_c - Fe_c)^2 / Fe_c)
crit_c <- qchisq(0.99, max(1, K_val - 1 - 1))
res_c  <- if(chi_c < crit_c) "APROBADO" else "RECHAZADO"

resumen_pendiente <- data.frame(
  "Segmento" = "Zona de Acumulaci\u00f3n (0.00 a 8.671)",
  "Modelo" = "Exponencial",
  "Pearson (%)" = round(pear_c, 2),
  "Chi-Calc" = round(chi_c, 2),
  "Chi-Crit" = round(crit_c, 2),
  "Estado" = res_c
)

resumen_pendiente[nrow(resumen_pendiente) + 1, ] <- c("Autor: Fernando Neira", "", "", "", "", "")

kable(resumen_pendiente, 
      format = "markdown", 
      align = "llcccc",
      caption = "Tabla No. 3: Resumen de validaci\u00f3n del modelo de probabilidad (Variable Pendiente)")
Tabla No. 3: Resumen de validación del modelo de probabilidad (Variable Pendiente)
Segmento Modelo Pearson…. Chi.Calc Chi.Crit Estado
Zona de Acumulación (0.00 a 8.671) Exponencial 97.49 12.48 29.14 APROBADO
Autor: Fernando Neira

8 CÁLCULO DE PROBABILIDADES

Tras validar que el comportamiento de la pendiente del terreno se ajusta con precisión a un modelo de distribución Exponencial, procedemos a proyectar los escenarios operativos y de diseño estructural para la implementación de los parques solares:

\(Pregunta\) \(1\) : ¿Cuál es la probabilidad teórica de encontrar una zona con una pendiente entre \(0.00\) y \(2.50\)?

\(Pregunta\) \(2\) : Si se instalan \(350\) soportes estructurales en el área de estudio, ¿cuántos de estos caerán en un rango de pendiente aceptable (entre \(0.00\) y \(5.00\)), donde la inclinación permite anclarlos directamente sin gastar en nivelación del terreno?

suppressPackageStartupMessages(library(MASS))

slope_completa <- na.omit(Datos$slope)
n_total_global <- length(slope_completa)
slope_segmento <- slope_completa[slope_completa >= 0.00 & slope_completa <= 8.671]
n_seg <- length(slope_segmento)

ajuste_e <- suppressWarnings(fitdistr(slope_segmento, "exponential"))
rate_e <- ajuste_e$estimate["rate"]

K_sturges <- floor(1 + 3.322 * log10(n_seg))
cortes_seg <- seq(0.00, 8.671, length.out = K_sturges + 1)
ancho_barra <- cortes_seg[2] - cortes_seg[1]

x_curva <- seq(0.00, 8.671, length.out = 300)
y_curva_hi <- dexp(x_curva, rate = rate_e) * ancho_barra * 100 * (n_seg / n_total_global)

par(mar = c(6, 5, 4, 2))
plot(x_curva, y_curva_hi, type = "n", 
     main = "Gr\u00e1fica N\u00ba 2: Zonas de Probabilidad (Modelo Exponencial)",
     xlab = "Pendiente del Terreno (°)", 
     ylab = "Densidad de Probabilidad",
     axes = FALSE,
     ylim = c(0, max(y_curva_hi) * 1.2))
x_q2 <- seq(0.00, 5.00, length.out = 100)
y_q2 <- dexp(x_q2, rate = rate_e) * ancho_barra * 100 * (n_seg / n_total_global)
polygon(c(0.00, x_q2, 5.00), c(0, y_q2, 0), col = "#D4E6F1", border = NA)

x_q1 <- seq(0.00, 2.50, length.out = 100)
y_q1 <- dexp(x_q1, rate = rate_e) * ancho_barra * 100 * (n_seg / n_total_global)
polygon(c(0.00, x_q1, 2.50), c(0, y_q1, 0), col = "#5DADE2", border = NA)

lines(x_curva, y_curva_hi, col = "#C0392B", lwd = 3)

axis(2, las = 2, cex.axis = 0.7)
axis(1, at = cortes_seg, labels = sprintf("%.3f", cortes_seg), las = 2, cex.axis = 0.6)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")

legend("topright", 
       legend = c("Curva Exponencial", 
                  "P 1: Ideal (0 a 2.5)", 
                  "P 2: Aceptable (0 a 5.0)"), 
       col = c("#C0392B", "#5DADE2", "#D4E6F1"), 
       lwd = c(3, 8, 8), bty = "n", cex = 0.8)

invisible()

\(Respuesta\) \(1\): Hay un \(86.93\)% de probabilidad de que el terreno tenga una “Inclinación Ideal” (\(0.000\) a \(2.500\)). Esta condición garantiza la estabilidad natural de los seguidores solares, asegurando una instalación segura y eficiente.

\(Respuesta\) \(2\): De \(350\) estructuras, \(344\) se ubicarán en el “Intervalo Aceptable” (\(0.000\) a \(5.000\)). Esto permite instalarlas con pernos convencionales, eliminando costos extras por nivelación del suelo.

9 TEOREMA DE LÍMITE CENTRAL

El TLC establece que, dada una muestra suficientemente grande (\(n\) > \(30\)), la distribución de las medias muestrales seguirá una distribución Normal. Esto nos permite estimar la Media Poblacional (\(\mu\)) verdadera utilizando intervalos de confianza.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}}\]

suppressPackageStartupMessages({
  library(gt)
  library(dplyr)
  library(MASS)
})

slope_variable <- na.omit(Datos$slope)
slope_variable <- slope_variable[slope_variable >= 0.00 & slope_variable <= 8.671]

x_bar_s <- mean(slope_variable)
sigma_s <- sd(slope_variable)
n_s <- length(slope_variable)

error_est_s <- sigma_s / sqrt(n_s)
margen_error_s <- 2 * error_est_s  

lim_inf_s <- x_bar_s - margen_error_s
lim_sup_s <- x_bar_s + margen_error_s

tabla_tlc_s <- data.frame(
  Parametro = "Pendiente Promedio (Slope)",
  Lim_Inferior = lim_inf_s,
  Media_Muestral = x_bar_s,
  Lim_Superior = lim_sup_s,
  Error_Estandar = paste0("+/- ", sprintf("%.3f", margen_error_s)),
  Confianza = "95% (2*E)"
)

tabla_tlc_s %>%
  gt() %>%
  tab_header(
    title = md("**ESTIMACI\u00d3N DE LA MEDIA POBLACIONAL**"),
    subtitle = "Aplicaci\u00f3n del Teorema del L\u00edmite Central (Pendiente)"
  ) %>%
  cols_label(
    Parametro = "Par\u00e1metro",
    Lim_Inferior = "L\u00edmite Inferior",
    Media_Muestral = "Media Calculada",
    Lim_Superior = "L\u00edmite Superior",
    Error_Estandar = "Error Estimado"
  ) %>%
  fmt_number(
    columns = c(Lim_Inferior, Media_Muestral, Lim_Superior),
    decimals = 3  
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#F4ECF7"), cell_text(color = "#5B2C6F", weight = "bold")),
    locations = cells_body(columns = Media_Muestral)
  )
ESTIMACIÓN DE LA MEDIA POBLACIONAL
Aplicación del Teorema del Límite Central (Pendiente)
Parámetro Límite Inferior Media Calculada Límite Superior Error Estimado Confianza
Pendiente Promedio (Slope) 1.216 1.228 1.241 +/- 0.013 95% (2*E)

10 CONCLUSIÓN

La variable Pendiente fue modelada mediante una Distribución Exponencial, reflejando alta precisión en el relieve del terreno. Con una media muestral de \(1.228\) y aplicando el Teorema del Límite Central, se estima que la media poblacional se sitúa entre [\(1.216\); \(1.241\)] con un \(95\%\) de confianza. Estos resultados permiten estandarizar el diseño de los soportes estructurales y optimizar los costos de nivelación de la planta solar (\(\mu = 1.228 \pm 0.013\)).