# Le cambié el nombre a 'configuracion_inicial' para evitar el error de duplicado
knitr::opts_chunk$set(echo = TRUE)
library(knitr)
# Intentar establecer el directorio
setwd("C:/Users/USER/Downloads/Elevación")La Elevación se define como una variable cuantitativa continua debido a que se expresa mediante valores numéricos reales que pueden adoptar cualquier cifra decimal dentro de un intervalo determinado. Al representar una magnitud física de distancia vertical, su naturaleza no admite saltos discretos, permitiendo una medición exacta y fluida del terreno donde la precisión depende únicamente del instrumento utilizado y no de la estructura de la variable.
Importamos el archivo “Dataset_Mundial_Final.csv” desde una ruta local y lo almacenamos en el objeto datos, usando comas como separador para estructurar correctamente la información de las columnas.
# 1. CARGA DE LIBRERÍAS (Silenciadas para el informe)
suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(readxl))
# 2. CARGAR EL ARCHIVO
Datos <- read_excel(file.choose(), sheet = "Dataset_Mundial_Final")
# 3. VERIFICAR 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 ...
Extraemos la variable elevación (elevation), omitimos las celdas en blanco o con valores iguales a cero y verificamos el tamaño muestral.
La tabla de distribución de frecuencias correspondiente a la aptitud solar (solar_aptitude) se elaboró aplicando la regla de Sturges para determinar el número óptimo de agrupaciones. Además, el tamaño o ancho de estas clases se definió a partir del recorrido total que presentan los valores en la muestra.
# 1. CARGAR LIBRERIAS
suppressPackageStartupMessages({
library(gt)
library(dplyr)
library(MASS)
})
# 2. FILTRADO Y PREPARACIÓN
elevation_clean <- Datos$elevation[Datos$elevation > 0 & Datos$elevation <= 1500]
elevation_clean <- na.omit(elevation_clean)
n_total <- length(elevation_clean)
K_raw <- floor(1 + 3.322 * log10(n_total))
min_val <- min(elevation_clean)
max_val <- max(elevation_clean)
# Definición de límites
breaks_raw <- seq(min_val, max_val, length.out = K_raw + 1)
lim_inf_raw <- breaks_raw[1:K_raw]
lim_sup_raw <- breaks_raw[2:(K_raw+1)]
MC_raw <- (lim_inf_raw + lim_sup_raw) / 2
# Frecuencias simples (Únicas que se mantienen)
ni_raw <- as.vector(table(cut(elevation_clean, breaks = breaks_raw, right = FALSE, include.lowest = TRUE)))
hi_raw <- (ni_raw / sum(ni_raw)) * 100
# 3. CONSTRUCCION DEL DATAFRAME (Sin acumuladas)
df_tabla_raw <- data.frame(
Li = round(lim_inf_raw, 0),
Ls = round(lim_sup_raw, 0),
MC = round(MC_raw, 0),
ni = ni_raw,
hi = hi_raw
)
# 4. GENERACION DE LA TABLA GT
# \u00ba = º | \u00d3 = Ó
df_tabla_raw %>%
gt() %>%
tab_header(
title = md("**TABLA N\u00ba 1: DISTRIBUCI\u00d3N DE FRECUENCIAS DE ELEVACI\u00d3N**"),
) %>%
cols_label(
Li = "Lim. Inf", Ls = "Lim. Sup", MC = "Marca Clase (Xi)",
ni = "ni", hi = "hi (%)"
) %>%
fmt_number(columns = c(Li, Ls, MC, ni), decimals = 0) %>%
fmt_number(columns = hi, decimals = 2) %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "white"), cell_text(color = "#4F4F4F", weight = "bold")),
locations = cells_title()
) %>%
tab_style(
style = list(cell_fill(color = "#F0F0F0"), cell_text(weight = "bold", color = "#4F4F4F")),
locations = cells_column_labels()
) %>%
tab_options(
table.width = pct(100),
table.border.top.color = "#D3D3D3",
table.border.bottom.color = "#D3D3D3",
column_labels.border.bottom.color = "#D3D3D3",
data_row.padding = px(6)
)| TABLA Nº 1: DISTRIBUCIÓN DE FRECUENCIAS DE ELEVACIÓN | ||||
| Lim. Inf | Lim. Sup | Marca Clase (Xi) | ni | hi (%) |
|---|---|---|---|---|
| 1 | 95 | 48 | 22,452 | 40.03 |
| 95 | 188 | 142 | 9,209 | 16.42 |
| 188 | 282 | 235 | 5,997 | 10.69 |
| 282 | 376 | 329 | 4,220 | 7.52 |
| 376 | 469 | 423 | 3,072 | 5.48 |
| 469 | 563 | 516 | 2,613 | 4.66 |
| 563 | 657 | 610 | 1,716 | 3.06 |
| 657 | 750 | 704 | 1,342 | 2.39 |
| 750 | 844 | 797 | 1,033 | 1.84 |
| 844 | 938 | 891 | 851 | 1.52 |
| 938 | 1,032 | 985 | 695 | 1.24 |
| 1,032 | 1,125 | 1,078 | 654 | 1.17 |
| 1,125 | 1,219 | 1,172 | 645 | 1.15 |
| 1,219 | 1,313 | 1,266 | 569 | 1.01 |
| 1,313 | 1,406 | 1,359 | 583 | 1.04 |
| 1,406 | 1,500 | 1,453 | 437 | 0.78 |
El análisis gráfico se realiza para visualizar de manera clara y rápida cómo se distribuyen los datos de la elevación (elevation). Esta representación permite identificar de forma intuitiva dónde se concentra la mayor parte de los valores y la forma general de la distribución, complementando la información numérica obtenida en la tabla de frecuencias.
# 1. PREPARACIÓN DE LOS DATOS Y FILTRADO
# Filtramos la variable elevation para el rango de tu tabla (1 a 1500)
elev_completa <- na.omit(Datos$elevation)
# Definimos el segmento de interés basado en tu tabla de frecuencias
elev_segmento <- elev_completa[elev_completa >= 1 & elev_completa <= 1500]
n_seg <- length(elev_segmento)
# 2. CÁLCULO DE INTERVALOS (Regla de Sturges sincronizada con la tabla)
K_sturges <- floor(1 + 3.322 * log10(n_seg))
cortes_seg <- seq(1, 1500, length.out = K_sturges + 1)
# 3. CREACIÓN Y ESCALADO DEL HISTOGRAMA
par(mar = c(6, 5, 4, 2))
h_elev_seg <- hist(elev_segmento, breaks = cortes_seg, plot = FALSE, right = FALSE)
# hi = (ni / n_seg) * 100 -> Porcentaje respecto al segmento filtrado
h_elev_seg$counts <- (h_elev_seg$counts / n_seg) * 100
# 4. DIBUJAR LA GRÁFICA (Solo Histograma)
# \u00ba = º | \u00f3 = ó
plot(h_elev_seg,
main = "Gr\u00e1fica N\u00ba 1: Distribuci\u00f3n de Frecuencias de Elevaci\u00f3n",
xlab = "Elevaci\u00f3n (msnm)",
ylab = "Frecuencia Relativa (%)",
col = "#B0C4DE", # Mantengo tu color original del código de slope
border = "white",
axes = FALSE,
ylim = c(0, max(h_elev_seg$counts) * 1.2))
# 5. EJES Y DISEÑO PROFESIONAL
axis(2, las = 2, cex.axis = 0.7)
# Eje X con números enteros para metros (msnm)
axis(1, at = cortes_seg, labels = sprintf("%.0f", cortes_seg), las = 2, cex.axis = 0.6)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
# 6. LEYENDA (Modelo Conjeturado: Exponencial)
legend("topright",
legend = c("Datos Emp\u00edricos (Elevaci\u00f3n)"),
fill = c("#B0C4DE", NA),
border = c("white", NA),
bty = "n",
cex = 0.8)Para garantizar la precisión del estudio, la muestra de elevación se estratificó en subconjuntos específicos, destacando el sector de mayor densidad comprendido entre 1 y 1,500 msnm. Este procedimiento permite identificar de forma independiente el modelo teórico —en este caso, la distribución Exponencial— que mejor se adapta a la distribución de este rango central, caracterizado por una mayor concentración de plantas solares en altitudes bajas con un decaimiento progresivo hacia zonas de mayor altura.
# BLOQUE 1: AJUSTE DEL MODELO EXPONENCIAL (ELEVACIÓN)
suppressPackageStartupMessages({
library(MASS)
library(dplyr)
})
# 1. Preparación y Filtrado
# Usamos tu variable elevation y el rango de tu tabla (1 a 1500)
elev_completa <- na.omit(Datos$elevation)
n_total_global <- length(elev_completa)
elev_segmento <- elev_completa[elev_completa >= 1 & elev_completa <= 1500]
n_seg <- length(elev_segmento)
# 2. Ajuste de la Conjetura (Exponencial)
ajuste_e <- suppressWarnings(fitdistr(elev_segmento, "exponential"))
rate_e <- ajuste_e$estimate["rate"]
# 3. Preparación del Histograma (Regla de Sturges)
K_sturges <- floor(1 + 3.322 * log10(n_seg))
cortes_seg <- seq(1, 1500, length.out = K_sturges + 1)
par(mar = c(6, 5, 4, 2))
h_elev_seg <- hist(elev_segmento, breaks = cortes_seg, plot = FALSE, right = FALSE)
# Transformación a Frecuencia Relativa hi (%)
h_elev_seg$counts <- (h_elev_seg$counts / n_total_global) * 100
# 4. Dibujar Gráfica
plot(h_elev_seg,
main = "Gr\u00e1fica N\u00ba 2: Ajuste Exponencial de Elevaci\u00f3n",
xlab = "Elevaci\u00f3n (msnm)",
ylab = "Frecuencia Relativa (%)",
col = "#B0C4DE", border = "white", axes = FALSE,
ylim = c(0, max(h_elev_seg$counts) * 1.3))
# 5. Línea de la Conjetura Exponencial (AJUSTADA AL PICO MÁXIMO)
x_curva <- seq(1, 1500, length.out = 300)
y_densidad <- dexp(x_curva, rate = rate_e)
# --- AJUSTE VISUAL: PARA QUE SALGA DESDE LA PUNTA DE LA BARRA MÁS ALTA ---
max_h_obs <- max(h_elev_seg$counts) # Altura de la barra más alta observada
max_y_teorico <- max(y_densidad) # Punto más alto del modelo matemático
y_curva_hi <- (y_densidad / max_y_teorico) * max_h_obs
lines(x_curva, y_curva_hi, col = "#C0392B", lwd = 4)
# 6. Ejes y Estética
axis(2, las = 2, cex.axis = 0.7)
axis(1, at = cortes_seg, labels = sprintf("%.0f", cortes_seg), las = 2, cex.axis = 0.6)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
legend("topright",
legend = c("Datos Emp\u00edricos (Elev)", "Modelo Exponencial"),
col = c("#B0C4DE", "#C0392B"), lwd = c(8, 4), bty = "n", cex = 0.8)# BLOQUE 2: TEST DE PEARSON Y CHI-CUADRADO (EXPONENCIAL)
# 1. Cálculo de Probabilidades Teóricas (Modelo Exponencial)
K_val <- length(cortes_seg) - 1
probs_e <- numeric(K_val)
for(i in 1:K_val) {
# IMPORTANTE: Usamos pexp (distribución exponencial acumulada)
probs_e[i] <- pexp(cortes_seg[i+1], rate = rate_e) -
pexp(cortes_seg[i], rate = rate_e)
}
# Normalización para asegurar base 100
probs_e <- probs_e / sum(probs_e)
n_base <- 100
# Frecuencias Observadas vs Esperadas
# Sincronizamos con el n_seg de la elevación filtrada
Fo_c <- as.vector(table(cut(elev_segmento, breaks = cortes_seg, right = FALSE))) * (n_base / n_seg)
Fe_c <- probs_e * n_base
# 2. Estadísticos de Prueba
chi_calc <- sum((Fo_c - Fe_c)^2 / Fe_c)
# Grados de Libertad: Exponencial tiene 1 parámetro (rate), por lo que df = K - 1 - 1
df_val <- max(1, K_val - 2)
chi_crit <- qchisq(0.99, df_val)
# Decisión final
resultado_chi <- if(chi_calc < chi_crit) "APROBADO" else "RECHAZADO"
pearson_val <- cor(Fo_c, Fe_c) * 100
# 3. Salida de Resultados
cat("\n--- RESULTADOS DE VALIDACI\u00d3N ELEVACI\u00d3N ---\n")##
## --- RESULTADOS DE VALIDACIÓN ELEVACIÓN ---
## Modelo: Exponencial | Rango: 1 a 1500 msnm
## Prueba Chi-cuadrado: APROBADO
## Chi-calculado: 15.05 | Chi-crítico: 29.14
## Correlación de Pearson: 94.68 %
# 1. CARGAR LIBRERIAS
library(knitr)
suppressPackageStartupMessages(library(MASS))
# 2. CÁLCULOS TÉCNICOS (Adaptados a Elevación con Log-Normal)
# Filtramos el segmento de interés (0 a 1500 msnm)
elev_seg <- na.omit(Datos$elevation[Datos$elevation > 0 & Datos$elevation <= 1500])
n_seg <- length(elev_seg)
# Ajuste Log-Normal (El modelo que tus datos aprobaron)
ajuste_ln <- fitdistr(elev_seg, "lognormal")
m_ln <- ajuste_ln$estimate["meanlog"]
s_ln <- ajuste_ln$estimate["sdlog"]
# Intervalos y Frecuencias (Regla de Sturges)
K_val <- floor(1 + 3.322 * log10(n_seg))
cortes_seg <- seq(min(elev_seg), 1500, length.out = K_val + 1)
# Probabilidades y Frecuencias base 100
probs_ln <- numeric(K_val)
for(i in 1:K_val) {
probs_ln[i] <- plnorm(cortes_seg[i+1], meanlog = m_ln, sdlog = s_ln) -
plnorm(cortes_seg[i], meanlog = m_ln, sdlog = s_ln)
}
probs_ln <- probs_ln / sum(probs_ln) # Normalización
# Frecuencias Observadas (Fo) vs Esperadas (Fe)
Fo_e <- as.vector(table(cut(elev_seg, breaks = cortes_seg, right = FALSE))) * (100 / n_seg)
Fe_e <- probs_ln * 100
# Estadísticos finales
pear_e <- cor(Fo_e, Fe_e) * 100
chi_e <- sum((Fo_e - Fe_e)^2 / Fe_e)
crit_e <- qchisq(0.99, max(1, K_val - 3))
res_e <- if(chi_e < crit_e) "APROBADO" else "RECHAZADO"
# 3. GENERACIÓN DE LA TABLA RESUMEN
# \u00f3 = ó | \u00ed = í
resumen_elevacion <- data.frame(
"Segmento" = "Zona de Acumulaci\u00f3n (0 a 1500 msnm)",
"Modelo" = "Log-Normal",
"Pearson (%)" = round(pear_e, 2),
"Chi-Calc" = round(chi_e, 2),
"Chi-Crit" = round(crit_e, 2),
"Estado" = res_e
)
# Imprimir tabla con formato kable
kable(resumen_elevacion,
format = "markdown",
align = "llcccc",
caption = "Tabla No. 3: Resumen de validaci\u00f3n del modelo de probabilidad (Variable Elevaci\u00f3n)")| Segmento | Modelo | Pearson…. | Chi.Calc | Chi.Crit | Estado |
|---|---|---|---|---|---|
| Zona de Acumulación (0 a 1500 msnm) | Log-Normal | 99.79 | 4.35 | 27.69 | APROBADO |
Tras validar que la elevación del terreno se ajusta a un modelo Exponencial, podemos predecir qué tan viables son los terrenos para futuros proyectos dentro del rango de 1 a 1,500 msnm: Pregunta 1: ¿Qué tan probable es encontrar terrenos fáciles de construir? ¿Cuál es la probabilidad de que una planta solar se ubique en la “Zona de Construcción Simple” (entre 1 y 300 msnm), donde el acceso es más rápido y los costos de transporte son los más bajos del mercado?
Pregunta 2: ¿Cuántas plantas requerirán equipos especiales? De un nuevo grupo de 200 plantas solares, ¿cuántas se estima que se construirán en la “Zona de Altura Moderada” (entre 800 y 1,500 msnm), donde el aire es menos denso y se necesitan ventiladores más potentes para enfriar los equipos?
# BLOQUE: GRÁFICA DE RESPUESTA CORREGIDA
# 1. SEGURIDAD: Recalcular parámetros
elev_completa <- na.omit(Datos$elevation)
elev_segmento <- elev_completa[elev_completa >= 1 & elev_completa <= 1500]
rate_e <- 1 / mean(elev_segmento)
# 2. Definición de la curva
x_curva <- seq(1, 1500, length.out = 1000)
y_densidad <- dexp(x_curva, rate = rate_e)
# 3. Configuración del área (Aumentamos el margen superior para la leyenda)
par(mar = c(6, 5, 5, 2))
# 4. Crear el fondo de la gráfica
plot(x_curva, y_densidad, type = "n",
main = "Gr\u00e1fica N\u00ba 3: An\u00e1lisis de Probabilidad Operativa",
xlab = "Elevaci\u00f3n (msnm)",
ylab = "Densidad de Probabilidad",
axes = FALSE, ylim = c(0, max(y_densidad) * 1.2))
# 5. SOMBREADO P2: Zona de Altura Moderada (800 a 1500 msnm) - AZUL
x_p2 <- seq(800, 1500, length.out = 300)
y_p2 <- dexp(x_p2, rate = rate_e)
polygon(c(800, x_p2, 1500), c(0, y_p2, 0),
col = rgb(46, 134, 193, alpha = 90, maxColorValue = 255), border = NA)
# 6. SOMBREADO P1: Zona de Construcci\u00f3n Simple (1 a 300 msnm) - VERDE
x_p1 <- seq(1, 300, length.out = 200)
y_p1 <- dexp(x_p1, rate = rate_e)
polygon(c(1, x_p1, 300), c(0, y_p1, 0),
col = rgb(40, 180, 99, alpha = 160, maxColorValue = 255), border = NA)
# 7. Dibujar la línea de la Conjetura (Roja)
lines(x_curva, y_densidad, col = "#C0392B", lwd = 4)
# 8. Ejes y Detalles
axis(1, at = c(1, 300, 800, 1500), labels = c("1", "300", "800", "1500"), las = 2, cex.axis = 0.8)
axis(2, las = 2, cex.axis = 0.7)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
# 9. LEYENDA CORREGIDA: Cuadros separados y limpios
# La ubicamos en 'topright' pero con ajustes de estilo
legend("topright",
legend = c("Modelo Exponencial (Validado)",
"P1: Zona Simple (1-300m)",
"P2: Zona Altura (800-1500m)"),
col = c("#C0392B", NA, NA),
lty = c(1, NA, NA),
lwd = c(3, NA, NA),
fill = c(NA, rgb(40, 180, 99, alpha = 160, maxColorValue = 255),
rgb(46, 134, 193, alpha = 90, maxColorValue = 255)),
border = c(NA, "black", "black"), # Bordes para los cuadros de la leyenda
bty = "n",
cex = 0.75,
y.intersp = 1.2) # Espaciado entre líneas# Solución a Pregunta 1 (Probabilidad de 1 a 300 msnm)
prob_facil <- pexp(300, rate = rate_e) - pexp(1, rate = rate_e)
cat("La probabilidad de terrenos fáciles es de:", round(prob_facil * 100, 2), "%\n")## La probabilidad de terrenos fáciles es de: 66.18 %
# Solución a Pregunta 2 (Estimación para 200 plantas entre 800 y 1500 msnm)
prob_altura <- pexp(1500, rate = rate_e) - pexp(800, rate = rate_e)
total_plantas <- 200 * prob_altura
cat("Se estima que", round(total_plantas, 0), "plantas necesitarán equipos especiales.\n")## Se estima que 10 plantas necesitarán equipos especiales.
Respuesta 1: Hay un 66.18% de probabilidad de que los terrenos sean clasificados como fáciles. Esto indica que la mayoría de la superficie no presentará complicaciones técnicas severas, permitiendo una ejecución más fluida en la mayor parte del área del proyecto.
Respuesta 2: Se estima que solo 10 plantas (una fracción mínima del total) requerirán equipos especiales. Esto representa una ventaja logística significativa, ya que la necesidad de maquinaria costosa o procesos de instalación complejos está altamente focalizada y no afecta la escala general de la obra.
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 (μ ) verdadera utilizando intervalos de confianza.Los postulados de confianza empírica sugieren: P(x¯−E<μ<x¯+E)≈68% P(x¯−2E<μ<x¯+2E)≈95% P(x¯−3E<μ<x¯+3E)≈99% Donde el Margen de Error (E) se define como:
E=σ−−√n
# BLOQUE: TEOREMA DEL LÍMITE CENTRAL (ELEVACIÓN)
# 1. CARGAR LIBRERIAS (SILENCIADO)
suppressPackageStartupMessages({
library(gt)
library(dplyr)
library(MASS)
})
# 2. PREPARACIÓN DE LA VARIABLE
# Filtramos según tus límites establecidos: 1 a 1500 msnm
elev_tlc <- na.omit(Datos$elevation)
elev_tlc <- elev_tlc[elev_tlc >= 1 & elev_tlc <= 1500]
# 3. CALCULO DE ESTADISTICOS ARITMETICOS
x_bar_e <- mean(elev_tlc) # Media de la muestra
sigma_e <- sd(elev_tlc) # Desviación estándar
n_e <- length(elev_tlc) # Tamaño de la muestra (n)
# 4. CALCULO DEL ERROR ESTANDAR Y MARGEN AL 95%
# El TLC establece: E = sigma / sqrt(n)
error_est_e <- sigma_e / sqrt(n_e)
margen_error_e <- 2 * error_est_e # Para el 95% de confianza (2 * Error Estándar)
# 5. INTERVALO DE CONFIANZA (Media +/- Margen de Error)
lim_inf_e <- x_bar_e - margen_error_e
lim_sup_e <- x_bar_e + margen_error_e
# 6. CONSTRUCCION DE LA TABLA RESUMEN
tabla_tlc_e <- data.frame(
Parametro = "Elevaci\u00f3n Promedio (msnm)",
Lim_Inferior = lim_inf_e,
Media_Muestral = x_bar_e,
Lim_Superior = lim_sup_e,
Error_Estandar = paste0("+/- ", sprintf("%.4f", margen_error_e)),
Confianza = "95% (2*E)"
)
# 7. GENERACION DE LA TABLA VISUAL (Formato Profesional)
tabla_tlc_e %>%
gt() %>%
tab_header(
title = md("**ESTIMACI\u00d3N DE LA MEDIA POBLACIONAL (ELEVACI\u00d3N)**"),
subtitle = "Aplicaci\u00f3n del Teorema del L\u00edmite Central (Rango 1-1500 msnm)"
) %>%
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 = 2 # Para elevación usamos 2 decimales
) %>%
tab_style(
style = list(cell_fill(color = "#F4ECF7"), cell_text(color = "#5B2C6F", weight = "bold")),
locations = cells_body(columns = Media_Muestral)
) %>%
tab_options(
table.width = pct(90),
column_labels.background.color = "#F4ECF7"
)| ESTIMACIÓN DE LA MEDIA POBLACIONAL (ELEVACIÓN) | |||||
| Aplicación del Teorema del Límite Central (Rango 1-1500 msnm) | |||||
| Parámetro | Límite Inferior | Media Calculada | Límite Superior | Error Estimado | Confianza |
|---|---|---|---|---|---|
| Elevación Promedio (msnm) | 271.24 | 273.97 | 276.70 | +/- 2.7340 | 95% (2*E) |
La variable Elevación fue modelada mediante una Distribución Exponencial, reflejando la concentración de la superficie en niveles topográficos bajos dentro del área de estudio. Con una media muestral de 273.97 msnm y aplicando el Teorema del Límite Central, se estima que la media poblacional se sitúa entre [271.24; 276.70] msnm con un 95% de confianza. Estos resultados permiten estandarizar los protocolos de instalación de seguidores solares y optimizar los costos de logística y transporte de materiales (\(\mu = 273.97 \pm 2.7340\)).