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:
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.
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.
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.
## ── 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
##
## Adjuntando el paquete: 'MASS'
##
## The following object is masked from 'package:dplyr':
##
## select
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 | ||||
El histograma estilizado revela la morfología del terreno, permitiendo identificar rápidamente los rangos de estabilidad para los seguidores solares.
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)# 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")# 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 | ||||
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.
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 | ||||
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\)).