1 Identificación y Justificación de la Variable

Variable de Estudio: Curvatura.

Se determina que esta variable es Cuantitativa Continua. En el análisis de infraestructura energética, la curvatura define la forma del relieve dentro de un dominio global \(D = \{ x \in \mathbb{R} \}\), condicionando directamente la estabilidad geomorfológica y el diseño detallado de la obra civil. Debido a la hiper-concentración de valores en el origen y la presencia de colas pesadas, se opta por una Estrategia de Refinamiento y Modelado Robusto:

  1. Se aisló el rango central operacional (\(-0.035\) a \(0.049\)), redistribuyendo los datos para revelar la variabilidad real de las formas del terreno (convexidad y concavidad) que quedaba oculta en la escala global.

  2. Distribución t-Student. Su capacidad para manejar la alta densidad en el pico central de la muestra superó a modelos más rígidos (como el Normal), asegurando una inferencia técnica robusta para la estabilidad de anclajes.

  3. La precisión se garantiza mediante el Coeficiente de Pearson (\(R\)) y la Prueba Chi-cuadrado (\(\chi^2\)), validando la representatividad del modelo para la ingeniería.

2 Configuración y Carga de Datos

# Librerías 
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.6
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.1     ✔ tibble    3.3.0
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.0     
## ── 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(gt)
library(MASS)
## 
## Adjuntando el paquete: 'MASS'
## 
## The following object is masked from 'package:dplyr':
## 
##     select
library(knitr)

# Carga de Datos
Datos <- read.csv("Dataset_Mundial_Final.csv", sep = ";", dec = ",")

# Limpieza inicial
curvatura_global <- na.omit(as.numeric(Datos$curvature))
n_total_global <- length(curvatura_global)

3 Tabla de Distribución de Frecuencias

Se estructuró la tabla segmentando el rango de mayor densidad operativa (\(-0.035\) a \(0.049\)) bajo la regla de Sturges. Este procedimiento incrementa la resolución estadística y elimina la distorsión provocada por los valores extremos del relieve.

# Segmentación estratégica
curv_filtrada <- curvatura_global[curvatura_global >= -0.035 & curvatura_global <= 0.049]
n_seg <- length(curv_filtrada)

# Construcción de intervalos
K_curv <- floor(1 + 3.322 * log10(n_seg))
cortes_curv <- seq(-0.035, 0.049, length.out = K_curv + 1)

ni_c <- as.vector(table(cut(curv_filtrada, breaks = cortes_curv, right = FALSE, include.lowest = TRUE)))
hi_c <- (ni_c / n_seg) * 100 

df_tabla_curv <- data.frame(
  Li = cortes_curv[1:K_curv], 
  Ls = cortes_curv[2:(K_curv+1)],
  MC = (cortes_curv[1:K_curv] + cortes_curv[2:(K_curv+1)]) / 2,
  ni = ni_c, 
  hi = hi_c
)

df_tabla_curv %>%
  gt() %>%
  tab_header(title = md("**Tabla N°1 de Distribución de Frecuencias de Curvatura de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Fernando Neira") %>%
  cols_label(Li = "Lim. Inf", Ls = "Lim. Sup", MC = "Marca Clase", ni = "ni", hi = "hi (%)") %>%
  fmt_number(columns = 1:3, decimals = 4) %>%
  fmt_number(columns = 5, decimals = 2) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_options(column_labels.background.color = "#F0F0F0")
Tabla N°1 de Distribución de Frecuencias de Curvatura de las Plantas Solares
Lim. Inf Lim. Sup Marca Clase ni hi (%)
−0.0350 −0.0298 −0.0324 490 0.85
−0.0298 −0.0245 −0.0271 570 0.99
−0.0245 −0.0193 −0.0219 844 1.47
−0.0193 −0.0140 −0.0166 1324 2.31
−0.0140 −0.0088 −0.0114 3119 5.44
−0.0088 −0.0035 −0.0061 6303 10.99
−0.0035 0.0018 −0.0009 28845 50.30
0.0018 0.0070 0.0044 9338 16.28
0.0070 0.0122 0.0096 3169 5.53
0.0122 0.0175 0.0149 1204 2.10
0.0175 0.0227 0.0201 742 1.29
0.0227 0.0280 0.0254 443 0.77
0.0280 0.0333 0.0306 421 0.73
0.0333 0.0385 0.0359 224 0.39
0.0385 0.0437 0.0411 159 0.28
0.0437 0.0490 0.0464 153 0.27
Autor: Fernando Neira

4 Análisis Gráfico

El histograma estilizado revela la morfología del terreno, permitiendo identificar rápidamente los rangos de estabilidad para los seguidores solares.

4.1 Histograma de Frecuencia

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

h_curv <- hist(curv_filtrada, breaks = cortes_curv, plot = FALSE, right = FALSE)
h_curv$counts <- (h_curv$counts / n_seg) * 100

plot(h_curv, 
     main = "",
     xlab = "", ylab = "Porcentaje (%)",
     col = "#B0C4DE", border = "black", 
     axes = FALSE,
     ylim = c(0, max(h_curv$counts) * 1.3))

axis(2, las = 2)
axis(1, at = cortes_curv, labels = sprintf("%.3f", cortes_curv), las = 2, cex.axis = 0.6)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
mtext("Curvatura)", side = 1, line = 5.5, cex = 1)
mtext("Gráfica N°1: Distribución Porcentual de las Plantas Solares por Curvatura", side = 3, line = 2, adj = 0.5, cex = 1.1, font = 2)

legend("topright", legend = "Datos Empíricos", fill = "#B0C4DE", border = "black", bty = "n")
abline(h = 0, col = "black", lwd = 1.5)

5 Estratificación y Validación del Modelo

# Ajuste de distribución t-Student mediante MLE
ajuste_t <- suppressWarnings(
  fitdistr(curv_filtrada, "t", start = list(m = mean(curv_filtrada), s = sd(curv_filtrada), df = 5))
)
m_t <- ajuste_t$estimate["m"]; s_t <- ajuste_t$estimate["s"]; df_t <- ajuste_t$estimate["df"]

# Parámetros para validación visual
x_curva <- seq(-0.035, 0.049, length.out = 400)
ancho_barra <- cortes_curv[2] - cortes_curv[1]
y_densidad <- (1/s_t) * dt((x_curva - m_t)/s_t, df = df_t)
y_curva_hi <- y_densidad * ancho_barra * 100 

par(mar = c(8, 6, 5, 2))
plot(h_curv, 
     main = "Gráfica N°2: Validación del Modelo t-Student",
     xlab = "", ylab = "Porcentaje (%)",
     col = "#B0C4DE", border = "black", axes = FALSE,
     ylim = c(0, max(h_curv$counts) * 1.3))

lines(x_curva, y_curva_hi, col = "#C0392B", lwd = 3)
axis(1, at = cortes_curv, labels = sprintf("%.3f", cortes_curv), las = 2, cex.axis = 0.6)
axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
mtext("Curvatura", side = 1, line = 5.5)

legend("topright", legend = c("Datos Empíricos", "Conjetura t-Student"), 
       col = c("#B0C4DE", "#C0392B"), lwd = c(8, 3), bty = "n")

6 Tabla de Resumen de Bondad de Ajuste

# Cálculo de frecuencias teóricas
probs_t <- numeric(K_curv)
for(i in 1:K_curv) {
  probs_t[i] <- pt((cortes_curv[i+1] - m_t)/s_t, df = df_t) - pt((cortes_curv[i] - m_t)/s_t, df = df_t)
}
probs_t <- probs_t / sum(probs_t)

n_base <- 100
Fo_c <- (ni_c / n_seg) * n_base
Fe_c <- probs_t * n_base

pearson_val <- cor(Fo_c, Fe_c) * 100
chi_calc    <- sum((Fo_c - Fe_c)^2 / Fe_c)
chi_crit    <- qchisq(0.99, max(1, K_curv - 1 - 3))
resultado_chi <- if(chi_calc < chi_crit) "APROBADO" else "RECHAZADO"

resumen_curv <- data.frame(
  Segmento = "Zona Central (-0.03 a 0.04)",
  Modelo = "t-Student",
  Pearson_R = pearson_val,
  Chi_Calc = chi_calc,
  Estado = resultado_chi
)

resumen_curv %>%
  gt() %>%
  tab_header(title = md("**Tabla N°2 de Validación Técnica del Modelo**")) %>%
  tab_source_note(source_note = "Autor: Fernando Neira") %>%
  fmt_number(columns = 3:4, 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))
Tabla N°2 de Validación Técnica del Modelo
Segmento Modelo Pearson_R Chi_Calc Estado
Zona Central (-0.03 a 0.04) t-Student 99.61 5.11 APROBADO
Autor: Fernando Neira

7 Cálculo de Probabilidades

Utilizando el modelo validado, se proyectan los límites de tolerancia para la cimentación de seguidores solares:

Pregunta 1: ¿Cuál es la probabilidad de “Estabilidad Máxima” (entre \(-0.005\) y \(0.015\))?

Pregunta 2: En 350 soportes, ¿cuántos se estiman en el rango de “Tolerancia Estándar” (\(-0.015\) a \(0.025\))?

# Probabilidades directas de la distribución t
p1_raw <- pt((0.015 - m_t)/s_t, df = df_t) - pt((-0.005 - m_t)/s_t, df = df_t)
p2_raw <- pt((0.025 - m_t)/s_t, df = df_t) - pt((-0.015 - m_t)/s_t, df = df_t)

par(mar = c(6, 8, 4, 2))
plot(x_curva, y_densidad, type = "n", 
     main = "Gráfica N°3: Zonas de Probabilidad (Curvatura)",
     xlab = "Curvatura", ylab = "", axes = FALSE)

# Sombreado de Zonas
x_p1 <- seq(-0.005, 0.015, length.out = 100)
y_p1 <- (1/s_t) * dt((x_p1 - m_t)/s_t, df = df_t)
polygon(c(-0.005, x_p1, 0.015), c(0, y_p1, 0), col = "#5DADE2", border = NA)

lines(x_curva, y_densidad, col = "#C0392B", lwd = 3)
axis(1); axis(2, las = 2); grid()
mtext("Densidad de Probabilidad", side = 2, line = 5)

legend("topright", legend = c("Curva t-Student", paste0("P1: Estabilidad (", round(p1_raw*100, 2), "%)")), 
       col = c("#C0392B", "#5DADE2"), lwd = c(3, 10), bty = "n")

Respuesta 1: Existe una probabilidad del 80.89% de encontrar terrenos con curvatura óptima.

Respuesta 2: Se estima que 327 soportes operarán dentro de la tolerancia estándar de diseño.

8 Teorema del 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}}\]

x_bar_c <- mean(curv_filtrada); sigma_c <- sd(curv_filtrada)
E <- 1.96 * (sigma_c / sqrt(n_seg))

data.frame(
  Parametro = "Curvatura Promedio",
  Lim_Inferior = x_bar_c - E,
  Media_Muestral = x_bar_c,
  Lim_Superior = x_bar_c + E,
  Confianza = "95% (Z=1.96)"
) %>% 
  gt() %>%
  tab_header(title = md("**Tabla N\u00ba 3 de Estimación de la Media Poblacional (TLC)**")) %>%
  tab_source_note(source_note = "Autor: Fernando Neira") %>%
  fmt_number(columns = 2:4, decimals = 5) %>%
  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")
Tabla Nº 3 de Estimación de la Media Poblacional (TLC)
Parametro Lim_Inferior Media_Muestral Lim_Superior Confianza
Curvatura Promedio −0.00041 −0.00033 −0.00026 95% (Z=1.96)
Autor: Fernando Neira

9 Conclusiones

La variable Curvatura fue modelada mediante una Distribución t-Student, reflejando alta precisión en el relieve del terreno. Con una media muestral de \(-0.00033\) \(m^{-1}\) y aplicando el Teorema del Límite Central, se estima que la media poblacional se sitúa entre [\(-0.00041\); \(-0.00026\)] \(m^{-1}\) 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 = -0.00033 \pm 0.000075\)).