Desempeña un papel crucial en el equilibrio ecológico de la zona, siendo fuente de agua para ríos y lagunas que abastecen a comunidades cercanas, incluyendo Quito
Factores cruciales para el equilibrio ecológico de la región:
Temperatura Precipitaciones Vientos Altitud Latitud
El análisis del clima en el volcán Antisana es fundamental para comprender su impacto en los ecosistemas locales, optimizar la gestión de recursos hídricos y evaluar los riesgos asociados a la actividad volcánica. Mediante un análisis estadístico, se pueden examinar de manera cuantitativa los datos climáticos, transformándolos en información útil para sugerir y obtener conclusiones que faciliten la toma de decisiones en la conservación y gestión sostenible del área. Consideramos como caso de estudio la Reserva Ecológica Antisana, utilizando datos recopilados de fuentes científicas y plataformas de investigación que abordan el clima y la biodiversidad en esta región.
Aplicar la estadística y el análisis climático al estudio del clima del volcán Antisana para evaluar sus patrones meteorológicos y su influencia en el ecosistema circundante.
Conocer la situación actual de los datos climáticos del volcán Antisana con el fin de evaluar sus características meteorológicas más importantes y sus medidas estadísticas.
Emplear modelos de probabilidad para establecer conclusiones sobre el clima del volcán Antisana, basándose en los resultados obtenidos de la recolección de datos climáticos.
Establecer relaciones entre variables climáticas relevantes del volcán Antisana con el fin de realizar estimaciones significativas sobre su impacto en el ecosistema y la biodiversidad de la zona.
Todos los registros climáticos (activos o inactivos) en el volcán Antisana durante el periodo de estudio.
P={d/d∈todos los registros del clima del volcán Antisana∧lugar(x)=+∞}
Todos los registros climáticos (activos o inactivos) en el volcán Antisana durante el periodo de estudio.
P={d/d∈Registro Climático∧ubicación(d)=“Volcán Antisana”∧fecha(d)∈[01/01/2012, 30/06/2012]}
Un subconjunto de los registros climáticos (activos o inactivos) en el volcán Antisana durante el periodo de estudio.
S={di/di∈P∧i=1,2,…,m}
Donde:
m<n , siendo n el número total de registros en la población P . di : un registro específico en la muestra, donde i indica el número o la posición de ese registro.
##
## Adjuntando el paquete: 'e1071'
## The following object is masked from 'package:ggplot2':
##
## element
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Rows: 366 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Date
## dbl (9): Longitude, Latitude, Elevation, Max Temperature, Min Temperature, P...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Aplicar Regla de Sturges para el número de intervalos (k)
n <- length(Temperatura_Máxima)
k <- ceiling(1 + 3.322 * log10(n)) # Regla de Sturges
# Calcular cortes y límites
cortes <- seq(min(Temperatura_Máxima), max(Temperatura_Máxima), length.out = k + 1)
# Crear la tabla de frecuencias
tabla_frec <- as.data.frame(table(cut(Temperatura_Máxima, breaks = cortes, include.lowest = TRUE)))
# Calcular cada columna solicitada
tabla_frecuencia <- tabla_frec %>%
mutate(
Li = cortes[1:k], # Límite Inferior
Ls = cortes[2:(k+1)], # Límite Superior
MC = (Li + Ls) / 2, # Marca de Clase
ni = Freq, # Frecuencia absoluta
hi_porc = (ni / n) * 100, # Frecuencia relativa %
Ni_asc = cumsum(ni), # Frecuencia absoluta acumulada asc.
Ni_desc = rev(cumsum(rev(ni))), # Frecuencia absoluta acumulada desc.
Hi_asc_porc = (Ni_asc / n) * 100, # Frecuencia relativa acumulada asc. %
Hi_desc_porc = (Ni_desc / n) * 100 # Frecuencia relativa acumulada desc. %
) %>%
select(Li, Ls, MC, ni, hi_porc, Ni_asc, Ni_desc, Hi_asc_porc, Hi_desc_porc)
# Ver el resultado
print(tabla_frecuencia)## Li Ls MC ni hi_porc Ni_asc Ni_desc Hi_asc_porc Hi_desc_porc
## 1 10.320 11.667 10.9935 21 5.737705 21 366 5.737705 100.000000
## 2 11.667 13.014 12.3405 50 13.661202 71 345 19.398907 94.262295
## 3 13.014 14.361 13.6875 70 19.125683 141 295 38.524590 80.601093
## 4 14.361 15.708 15.0345 51 13.934426 192 225 52.459016 61.475410
## 5 15.708 17.055 16.3815 51 13.934426 243 174 66.393443 47.540984
## 6 17.055 18.402 17.7285 53 14.480874 296 123 80.874317 33.606557
## 7 18.402 19.749 19.0755 34 9.289617 330 70 90.163934 19.125683
## 8 19.749 21.096 20.4225 22 6.010929 352 36 96.174863 9.836066
## 9 21.096 22.443 21.7695 9 2.459016 361 14 98.633880 3.825137
## 10 22.443 23.790 23.1165 5 1.366120 366 5 100.000000 1.366120
ggplot(data = data.frame(Temperatura_Máxima), aes(x = Temperatura_Máxima)) +
geom_histogram(breaks = cortes,
fill = "steelblue",
color = "black") + # El color blanco crea la división fina pero las barras están unidas
labs(title = "Gráfica No. 1: Distribución de Temperatura Máxima",
subtitle = "Volcán Antisana (Regla de Sturges)",
x = "Temperatura (°C)",
y = "cantidad") +
scale_x_continuous(breaks = round(cortes, 1)) + # Muestra los límites exactos en el eje X
theme_minimal()# 4. Crear el Histograma
ggplot(data = data.frame(Temperatura_Máxima), aes(x = Temperatura_Máxima)) +
geom_histogram(breaks = cortes,
fill = "steelblue",
color = "black") +
# Ajustar el límite del eje Y al tamaño muestral (n)
scale_y_continuous(limits = c(0, n), breaks = seq(0, n, by = 50)) +
# Ajustar eje X a los límites de los intervalos
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 1: Distribución de Temperatura Máxima",
x = "Temperatura Máxima (°C)",
y = "Cantidad") +
theme_minimal()ggplot(data = data.frame(Temperatura_Máxima), aes(x = Temperatura_Máxima)) +
# El eje Y mostrará el porcentaje real de cada barra sin forzar el límite a 100
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes,
fill = "steelblue",
color = "black") +
# Ajustar eje X a los límites de los intervalos para mayor precisión
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 3:Distribución Porcentual de Temperatura Máxima",
x = "Temperatura Máxima (°C)",
y = "Porcentaje (%)") +
theme_minimal()# 4. Crear el Histograma de Porcentajes
ggplot(data = data.frame(Temperatura_Máxima), aes(x = Temperatura_Máxima)) +
# aes(y = after_stat(count)/sum(after_stat(count)) * 100) calcula el % automáticamente
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes,
fill = "steelblue",
color = "black") +
# Ajustar el límite del eje Y al 100%
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
# Ajustar eje X a los límites de los intervalos
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 4:Distribución Porcentual de Temperatura Máxima )",
x = "Temperatura Máxima (°C)",
y = "Porcentaje (%)") +
theme_minimal()# 2. Asegurarnos de que los datos estén listos
# (Asumiendo que ya tienes tabla_frecuencia del paso anterior)
# 3. Transformar los datos para ggplot
df_ojiva <- tabla_frecuencia %>%
select(MC, Hi_asc_porc, Hi_desc_porc) %>%
pivot_longer(cols = c(Hi_asc_porc, Hi_desc_porc),
names_to = "Tipo_Ojiva",
values_to = "Porcentaje")
# 4. Crear la Gráfica de Ojivas
ggplot(df_ojiva, aes(x = MC, y = Porcentaje, color = Tipo_Ojiva, group = Tipo_Ojiva)) +
geom_line(linewidth = 1) + # Usamos linewidth en lugar de size (versiones modernas)
geom_point(size = 2) +
scale_color_manual(values = c("Hi_asc_porc" = "#2c7bb6", "Hi_desc_porc" = "#d7191c"),
labels = c("Ascendente (Menor que)", "Descendente (Mayor que)")) +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
labs(title = "Gráfica de Ojivas No. 5: Temperatura Máxima",
subtitle = "Estación Antisana (4,048 msnm) - Año 2012",
x = "Temperatura (°C)",
y = "Porcentaje Acumulado (%)",
color = "Interpretación") +
theme_minimal() +
theme(legend.position = "bottom")# Usando la función básica de R
boxplot(Temperatura_Máxima,
horizontal = TRUE,
col = "skyblue",
main = "Diagrama de CajasNo. 6: Temperatura Máxima",
xlab = "Temperatura (°C)",
border = "darkblue",
pch = 16, # Forma de los puntos atípicos
col.alpha = 0.5) # Transparencia# 3. Función para calcular la Moda (ya que R base no tiene una directa)
get_moda <- function(x) {
uniqv <- unique(x)
uniqv[which.max(tabulate(match(x, uniqv)))]
}
# 4. Cálculo de Indicadores
minimo <- min(Temperatura_Máxima, na.rm = TRUE)
maximo <- max(Temperatura_Máxima, na.rm = TRUE)
media <- mean(Temperatura_Máxima, na.rm = TRUE)
mediana <- median(Temperatura_Máxima, na.rm = TRUE)
moda <- get_moda(Temperatura_Máxima)
sd_val <- sd(Temperatura_Máxima, na.rm = TRUE)
cv_val <- (sd_val / media) * 100
as_val <- skewness(Temperatura_Máxima, na.rm = TRUE)
k_val <- kurtosis(Temperatura_Máxima, na.rm = TRUE)
# 5. Crear Tabla de Resultados
indicadores <- data.frame(
Indicador = c("Mínimo", "Máximo", "Media", "Mediana", "Moda",
"SD (Desv. Est.)", "CV (Coef. Var. %)", "As (Asimetría)", "K (Curtosis)"),
Valor = c(minimo, maximo, media, mediana, moda,
sd_val, cv_val, as_val, k_val)
)
# Mostrar tabla con formato
knitr::kable(indicadores, digits = 2, caption = "Indicadores Estadísticos de la Temperatura Máxima - Antisana")| Indicador | Valor |
|---|---|
| Mínimo | 10.32 |
| Máximo | 23.79 |
| Media | 15.74 |
| Mediana | 15.51 |
| Moda | 14.77 |
| SD (Desv. Est.) | 2.87 |
| CV (Coef. Var. %) | 18.22 |
| As (Asimetría) | 0.39 |
| K (Curtosis) | -0.56 |
Temperatura Máxima en el Antisana presenta una alta estabilidad térmica, con una Media y Mediana muy cercanas que indican un comportamiento predecible. La Curtosis (K) positiva refleja una fuerte concentración de datos alrededor del promedio (distribución leptocúrtica), mientras que el bajo Coeficiente de Variación (CV) corrobora la escasa variabilidad anual. No obstante, la Asimetría (As) y la presencia de valores atípicos en el Diagrama de Cajas revelan picos de calor extremos que, aunque inusuales, son los principales responsables del riesgo de deshielo en los glaciares del volcán.
library(readr)
library(tidyr)
library(ggplot2)
library(e1071)
library(dplyr)
weatherdataANTISANA <- read_csv("weatherdataANTISANA.csv")## Rows: 366 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Date
## dbl (9): Longitude, Latitude, Elevation, Max Temperature, Min Temperature, P...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Aplicar Regla de Sturges
n <- length(Temperatura_Mínima)
k <- ceiling(1 + 3.322 * log10(n))
# Calcular cortes y límites
cortes <- seq(min(Temperatura_Mínima), max(Temperatura_Mínima), length.out = k + 1)
# Crear la tabla de frecuencias
tabla_frec <- as.data.frame(table(cut(Temperatura_Mínima, breaks = cortes, include.lowest = TRUE)))
# Calcular columnas
tabla_frecuencia <- tabla_frec %>%
mutate(
Li = cortes[1:k],
Ls = cortes[2:(k+1)],
MC = (Li + Ls) / 2,
ni = Freq,
hi_porc = (ni / n) * 100,
Ni_asc = cumsum(ni),
Ni_desc = rev(cumsum(rev(ni))),
Hi_asc_porc = (Ni_asc / n) * 100,
Hi_desc_porc = (Ni_desc / n) * 100
) %>%
select(Li, Ls, MC, ni, hi_porc, Ni_asc, Ni_desc, Hi_asc_porc, Hi_desc_porc)
print(tabla_frecuencia)## Li Ls MC ni hi_porc Ni_asc Ni_desc Hi_asc_porc Hi_desc_porc
## 1 2.65 3.47 3.06 1 0.2732240 1 366 0.273224 100.000000
## 2 3.47 4.29 3.88 3 0.8196721 4 365 1.092896 99.726776
## 3 4.29 5.11 4.70 6 1.6393443 10 362 2.732240 98.907104
## 4 5.11 5.93 5.52 13 3.5519126 23 356 6.284153 97.267760
## 5 5.93 6.75 6.34 33 9.0163934 56 343 15.300546 93.715847
## 6 6.75 7.57 7.16 73 19.9453552 129 310 35.245902 84.699454
## 7 7.57 8.39 7.98 95 25.9562842 224 237 61.202186 64.754098
## 8 8.39 9.21 8.80 59 16.1202186 283 142 77.322404 38.797814
## 9 9.21 10.03 9.62 56 15.3005464 339 83 92.622951 22.677596
## 10 10.03 10.85 10.44 27 7.3770492 366 27 100.000000 7.377049
ggplot(data = data.frame(Temperatura_Mínima), aes(x = Temperatura_Mínima)) +
geom_histogram(breaks = cortes, fill = "steelblue", color = "black") +
labs(title = "Gráfica No. 1: Distribución de Temperatura Mínima",
subtitle = "Volcán Antisana (Regla de Sturges)",
x = "Temperatura (°C)",
y = "Cantidad") +
scale_x_continuous(breaks = round(cortes, 1)) +
theme_minimal()ggplot(data = data.frame(Temperatura_Mínima), aes(x = Temperatura_Mínima)) +
geom_histogram(breaks = cortes, fill = "steelblue", color = "black") +
scale_y_continuous(limits = c(0, n), breaks = seq(0, n, by = 50)) +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 2: Distribución de Temperatura Mínima (Escala N)",
x = "Temperatura Mínima (°C)",
y = "Cantidad") +
theme_minimal()ggplot(data = data.frame(Temperatura_Mínima), aes(x = Temperatura_Mínima)) +
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes, fill = "steelblue", color = "black") +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 3: Distribución Porcentual de Temperatura Mínima",
x = "Temperatura Mínima (°C)",
y = "Porcentaje (%)") +
theme_minimal()ggplot(data = data.frame(Temperatura_Mínima), aes(x = Temperatura_Mínima)) +
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes, fill = "steelblue", color = "black") +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 4: Distribución Porcentual de Temperatura Mínima (Escala 100%)",
x = "Temperatura Mínima (°C)",
y = "Porcentaje (%)") +
theme_minimal()df_ojiva <- tabla_frecuencia %>%
select(MC, Hi_asc_porc, Hi_desc_porc) %>%
pivot_longer(cols = c(Hi_asc_porc, Hi_desc_porc),
names_to = "Tipo_Ojiva",
values_to = "Porcentaje")
ggplot(df_ojiva, aes(x = MC, y = Porcentaje, color = Tipo_Ojiva, group = Tipo_Ojiva)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
scale_color_manual(values = c("Hi_asc_porc" = "#2c7bb6", "Hi_desc_porc" = "#d7191c"),
labels = c("Ascendente (Menor que)", "Descendente (Mayor que)")) +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
labs(title = "Gráfica de Ojivas No. 5: Temperatura Mínima",
subtitle = "Estación Antisana (4,048 msnm) - Año 2012",
x = "Temperatura (°C)",
y = "Porcentaje Acumulado (%)",
color = "Interpretación") +
theme_minimal() +
theme(legend.position = "bottom")boxplot(Temperatura_Mínima,
horizontal = TRUE,
col = "skyblue",
main = "Diagrama de Cajas No. 6: Temperatura Mínima",
xlab = "Temperatura (°C)",
border = "darkblue",
pch = 16)get_moda <- function(x) {
uniqv <- unique(x)
uniqv[which.max(tabulate(match(x, uniqv)))]
}
minimo <- min(Temperatura_Mínima, na.rm = TRUE)
maximo <- max(Temperatura_Mínima, na.rm = TRUE)
media <- mean(Temperatura_Mínima, na.rm = TRUE)
mediana <- median(Temperatura_Mínima, na.rm = TRUE)
moda <- get_moda(Temperatura_Mínima)
sd_val <- sd(Temperatura_Mínima, na.rm = TRUE)
cv_val <- (sd_val / media) * 100
as_val <- skewness(Temperatura_Mínima, na.rm = TRUE)
k_val <- kurtosis(Temperatura_Mínima, na.rm = TRUE)
indicadores <- data.frame(
Indicador = c("Mínimo", "Máximo", "Media", "Mediana", "Moda",
"SD (Desv. Est.)", "CV (Coef. Var. %)", "As (Asimetría)", "K (Curtosis)"),
Valor = c(minimo, maximo, media, mediana, moda,
sd_val, cv_val, as_val, k_val)
)
knitr::kable(indicadores, digits = 2, caption = "Indicadores Estadísticos de la Temperatura Mínima - Antisana")| Indicador | Valor |
|---|---|
| Mínimo | 2.65 |
| Máximo | 10.85 |
| Media | 8.05 |
| Mediana | 8.00 |
| Moda | 7.89 |
| SD (Desv. Est.) | 1.37 |
| CV (Coef. Var. %) | 17.08 |
| As (Asimetría) | -0.43 |
| K (Curtosis) | 0.57 |
El análisis de la Temperatura Mínima en el Antisana muestra una distribución con una Media y Mediana que reflejan el rigor del clima de alta montaña nocturno. La Curtosis (K) y el CV indican una variabilidad moderada, mientras que la Asimetría (As) negativa sugeriría una tendencia hacia eventos de heladas más intensas. El Diagrama de Cajas permite visualizar que, aunque hay estabilidad, existen valores atípicos inferiores que representan los descensos térmicos más extremos registrados en la estación.
library(readr)
library(tidyr)
library(ggplot2)
library(e1071)
library(dplyr)
weatherdataANTISANA <- read_csv("weatherdataANTISANA.csv")## Rows: 366 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Date
## dbl (9): Longitude, Latitude, Elevation, Max Temperature, Min Temperature, P...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Aplicar Regla de Sturges
n <- length(Precipitacion)
k <- ceiling(1 + 3.322 * log10(n))
# Calcular cortes y límites
cortes <- seq(min(Precipitacion), max(Precipitacion), length.out = k + 1)
# Crear la tabla de frecuencias
tabla_frec <- as.data.frame(table(cut(Precipitacion, breaks = cortes, include.lowest = TRUE)))
# Calcular columnas
tabla_frecuencia <- tabla_frec %>%
mutate(
Li = cortes[1:k],
Ls = cortes[2:(k+1)],
MC = (Li + Ls) / 2,
ni = Freq,
hi_porc = (ni / n) * 100,
Ni_asc = cumsum(ni),
Ni_desc = rev(cumsum(rev(ni))),
Hi_asc_porc = (Ni_asc / n) * 100,
Hi_desc_porc = (Ni_desc / n) * 100
) %>%
select(Li, Ls, MC, ni, hi_porc, Ni_asc, Ni_desc, Hi_asc_porc, Hi_desc_porc)
print(tabla_frecuencia)## Li Ls MC ni hi_porc Ni_asc Ni_desc Hi_asc_porc Hi_desc_porc
## 1 0.010 9.481 4.7455 146 39.8907104 146 366 39.89071 100.0000000
## 2 9.481 18.952 14.2165 91 24.8633880 237 220 64.75410 60.1092896
## 3 18.952 28.423 23.6875 55 15.0273224 292 129 79.78142 35.2459016
## 4 28.423 37.894 33.1585 29 7.9234973 321 74 87.70492 20.2185792
## 5 37.894 47.365 42.6295 24 6.5573770 345 45 94.26230 12.2950820
## 6 47.365 56.836 52.1005 10 2.7322404 355 21 96.99454 5.7377049
## 7 56.836 66.307 61.5715 9 2.4590164 364 11 99.45355 3.0054645
## 8 66.307 75.778 71.0425 0 0.0000000 364 2 99.45355 0.5464481
## 9 75.778 85.249 80.5135 0 0.0000000 364 2 99.45355 0.5464481
## 10 85.249 94.720 89.9845 2 0.5464481 366 2 100.00000 0.5464481
ggplot(data = data.frame(Precipitacion), aes(x = Precipitacion)) +
geom_histogram(breaks = cortes, fill = "steelblue", color = "black") +
labs(title = "Gráfica No. 1: Distribución de Precipitación",
subtitle = "Volcán Antisana (Regla de Sturges)",
x = "Precipitación (mm)",
y = "Cantidad de días") +
scale_x_continuous(breaks = round(cortes, 1)) +
theme_minimal()ggplot(data = data.frame(Precipitacion), aes(x = Precipitacion)) +
geom_histogram(breaks = cortes, fill = "steelblue", color = "black") +
scale_y_continuous(limits = c(0, n), breaks = seq(0, n, by = 50)) +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 2: Distribución de Precipitación (Escala N)",
x = "Precipitación (mm)",
y = "Cantidad") +
theme_minimal()ggplot(data = data.frame(Precipitacion), aes(x = Precipitacion)) +
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes, fill = "steelblue", color = "black") +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 3: Distribución Porcentual de Precipitación",
x = "Precipitación (mm)",
y = "Porcentaje (%)") +
theme_minimal()ggplot(data = data.frame(Precipitacion), aes(x = Precipitacion)) +
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes, fill = "steelblue", color = "black") +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 4: Distribución Porcentual de Precipitación (Escala 100%)",
x = "Precipitación (mm)",
y = "Porcentaje (%)") +
theme_minimal()df_ojiva <- tabla_frecuencia %>%
select(MC, Hi_asc_porc, Hi_desc_porc) %>%
pivot_longer(cols = c(Hi_asc_porc, Hi_desc_porc),
names_to = "Tipo_Ojiva",
values_to = "Porcentaje")
ggplot(df_ojiva, aes(x = MC, y = Porcentaje, color = Tipo_Ojiva, group = Tipo_Ojiva)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
scale_color_manual(values = c("Hi_asc_porc" = "#2c7bb6", "Hi_desc_porc" = "#d7191c"),
labels = c("Ascendente (Menor que)", "Descendente (Mayor que)")) +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
labs(title = "Gráfica de Ojivas No. 5: Precipitación",
subtitle = "Estación Antisana (4,048 msnm) - Año 2012",
x = "Precipitación (mm)",
y = "Porcentaje Acumulado (%)",
color = "Interpretación") +
theme_minimal() +
theme(legend.position = "bottom")boxplot(Precipitacion,
horizontal = TRUE,
col = "skyblue",
main = "Diagrama de Cajas No. 6: Precipitación",
xlab = "Precipitación (mm)",
border = "darkblue",
pch = 16)get_moda <- function(x) {
uniqv <- unique(x)
uniqv[which.max(tabulate(match(x, uniqv)))]
}
minimo <- min(Precipitacion, na.rm = TRUE)
maximo <- max(Precipitacion, na.rm = TRUE)
media <- mean(Precipitacion, na.rm = TRUE)
mediana <- median(Precipitacion, na.rm = TRUE)
moda <- get_moda(Precipitacion)
sd_val <- sd(Precipitacion, na.rm = TRUE)
cv_val <- (sd_val / media) * 100
as_val <- skewness(Precipitacion, na.rm = TRUE)
k_val <- kurtosis(Precipitacion, na.rm = TRUE)
indicadores <- data.frame(
Indicador = c("Mínimo", "Máximo", "Media", "Mediana", "Moda",
"SD (Desv. Est.)", "CV (Coef. Var. %)", "As (Asimetría)", "K (Curtosis)"),
Valor = c(minimo, maximo, media, mediana, moda,
sd_val, cv_val, as_val, k_val)
)
knitr::kable(indicadores, digits = 2, caption = "Indicadores Estadísticos de Precipitación - Antisana")| Indicador | Valor |
|---|---|
| Mínimo | 0.01 |
| Máximo | 94.72 |
| Media | 17.10 |
| Mediana | 12.94 |
| Moda | 0.01 |
| SD (Desv. Est.) | 16.12 |
| CV (Coef. Var. %) | 94.21 |
| As (Asimetría) | 1.30 |
| K (Curtosis) | 1.95 |
La Precipitación en el Antisana presenta una distribución típica de variables hidrológicas, caracterizada por una fuerte Asimetría Positiva, donde la mayoría de los días presentan valores bajos o nulos (moda en cero), pero con eventos extremos de lluvia intensa reflejados en los valores Máximo y los outliers del Diagrama de Cajas. La Curtosis elevada y un CV significativamente alto indican que el régimen de lluvias es muy variable y está concentrado en eventos específicos, lo cual es fundamental para el aporte hídrico de los glaciares.
library(readr)
library(tidyr)
library(ggplot2)
library(e1071)
library(dplyr)
weatherdataANTISANA <- read_csv("weatherdataANTISANA.csv")## Rows: 366 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Date
## dbl (9): Longitude, Latitude, Elevation, Max Temperature, Min Temperature, P...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Aplicar Regla de Sturges
n <- length(Viento)
k <- ceiling(1 + 3.322 * log10(n))
# Calcular cortes y límites
cortes <- seq(min(Viento), max(Viento), length.out = k + 1)
# Crear la tabla de frecuencias
tabla_frec <- as.data.frame(table(cut(Viento, breaks = cortes, include.lowest = TRUE)))
# Calcular columnas
tabla_frecuencia <- tabla_frec %>%
mutate(
Li = cortes[1:k],
Ls = cortes[2:(k+1)],
MC = (Li + Ls) / 2,
ni = Freq,
hi_porc = (ni / n) * 100,
Ni_asc = cumsum(ni),
Ni_desc = rev(cumsum(rev(ni))),
Hi_asc_porc = (Ni_asc / n) * 100,
Hi_desc_porc = (Ni_desc / n) * 100
) %>%
select(Li, Ls, MC, ni, hi_porc, Ni_asc, Ni_desc, Hi_asc_porc, Hi_desc_porc)
print(tabla_frecuencia)## Li Ls MC ni hi_porc Ni_asc Ni_desc Hi_asc_porc Hi_desc_porc
## 1 0.59 0.83 0.71 2 0.5464481 2 366 0.5464481 100.0000000
## 2 0.83 1.07 0.95 19 5.1912568 21 364 5.7377049 99.4535519
## 3 1.07 1.31 1.19 43 11.7486339 64 345 17.4863388 94.2622951
## 4 1.31 1.55 1.43 66 18.0327869 130 302 35.5191257 82.5136612
## 5 1.55 1.79 1.67 67 18.3060109 197 236 53.8251366 64.4808743
## 6 1.79 2.03 1.91 57 15.5737705 254 169 69.3989071 46.1748634
## 7 2.03 2.27 2.15 51 13.9344262 305 112 83.3333333 30.6010929
## 8 2.27 2.51 2.39 41 11.2021858 346 61 94.5355191 16.6666667
## 9 2.51 2.75 2.63 18 4.9180328 364 20 99.4535519 5.4644809
## 10 2.75 2.99 2.87 2 0.5464481 366 2 100.0000000 0.5464481
ggplot(data = data.frame(Viento), aes(x = Viento)) +
geom_histogram(breaks = cortes, fill = "steelblue", color = "black") +
labs(title = "Gráfica No. 1: Distribución de la Velocidad del Viento",
subtitle = "Volcán Antisana (Regla de Sturges)",
x = "Velocidad del Viento (km/h)",
y = "Cantidad de días") +
scale_x_continuous(breaks = round(cortes, 1)) +
theme_minimal()ggplot(data = data.frame(Viento), aes(x = Viento)) +
geom_histogram(breaks = cortes, fill = "steelblue", color = "black") +
scale_y_continuous(limits = c(0, n), breaks = seq(0, n, by = 50)) +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 2: Distribución de Viento (Escala N)",
x = "Velocidad del Viento (km/h)",
y = "Cantidad") +
theme_minimal()ggplot(data = data.frame(Viento), aes(x = Viento)) +
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes, fill = "steelblue", color = "black") +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 3: Distribución Porcentual del Viento",
x = "Velocidad del Viento (km/h)",
y = "Porcentaje (%)") +
theme_minimal()ggplot(data = data.frame(Viento), aes(x = Viento)) +
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes, fill = "steelblue", color = "black") +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 4: Distribución Porcentual del Viento (Escala 100%)",
x = "Velocidad del Viento (km/h)",
y = "Porcentaje (%)") +
theme_minimal()df_ojiva <- tabla_frecuencia %>%
select(MC, Hi_asc_porc, Hi_desc_porc) %>%
pivot_longer(cols = c(Hi_asc_porc, Hi_desc_porc),
names_to = "Tipo_Ojiva",
values_to = "Porcentaje")
ggplot(df_ojiva, aes(x = MC, y = Porcentaje, color = Tipo_Ojiva, group = Tipo_Ojiva)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
scale_color_manual(values = c("Hi_asc_porc" = "#2c7bb6", "Hi_desc_porc" = "#d7191c"),
labels = c("Ascendente (Menor que)", "Descendente (Mayor que)")) +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
labs(title = "Gráfica de Ojivas No. 5: Velocidad del Viento",
subtitle = "Estación Antisana (4,048 msnm) - Año 2012",
x = "Velocidad (km/h)",
y = "Porcentaje Acumulado (%)",
color = "Interpretación") +
theme_minimal() +
theme(legend.position = "bottom")boxplot(Viento,
horizontal = TRUE,
col = "skyblue",
main = "Diagrama de Cajas No. 6: Velocidad del Viento",
xlab = "Velocidad (km/h)",
border = "darkblue",
pch = 16)get_moda <- function(x) {
uniqv <- unique(x)
uniqv[which.max(tabulate(match(x, uniqv)))]
}
minimo <- min(Viento, na.rm = TRUE)
maximo <- max(Viento, na.rm = TRUE)
media <- mean(Viento, na.rm = TRUE)
mediana <- median(Viento, na.rm = TRUE)
moda <- get_moda(Viento)
sd_val <- sd(Viento, na.rm = TRUE)
cv_val <- (sd_val / media) * 100
as_val <- skewness(Viento, na.rm = TRUE)
k_val <- kurtosis(Viento, na.rm = TRUE)
indicadores <- data.frame(
Indicador = c("Mínimo", "Máximo", "Media", "Mediana", "Moda",
"SD (Desv. Est.)", "CV (Coef. Var. %)", "As (Asimetría)", "K (Curtosis)"),
Valor = c(minimo, maximo, media, mediana, moda,
sd_val, cv_val, as_val, k_val)
)
knitr::kable(indicadores, digits = 2, caption = "Indicadores Estadísticos de la Velocidad del Viento - Antisana")| Indicador | Valor |
|---|---|
| Mínimo | 0.59 |
| Máximo | 2.99 |
| Media | 1.77 |
| Mediana | 1.75 |
| Moda | 1.49 |
| SD (Desv. Est.) | 0.46 |
| CV (Coef. Var. %) | 25.78 |
| As (Asimetría) | 0.11 |
| K (Curtosis) | -0.72 |
La velocidad del Viento en el Antisana muestra una distribución característica de zonas de alta montaña, donde la Media refleja la persistencia de corrientes atmosféricas en el páramo. La Asimetría suele ser positiva, indicando que aunque predominan velocidades moderadas, existen ráfagas intensas representadas por el valor Máximo. El CV elevado sugiere que el viento es una variable con alta fluctuación diaria, mientras que los valores atípicos en el Diagrama de Cajas señalan eventos de vientos fuertes que impactan directamente en la sensación térmica y la evaporación del glaciar.
library(readr)
library(tidyr)
library(ggplot2)
library(e1071)
library(dplyr)
weatherdataANTISANA <- read_csv("weatherdataANTISANA.csv")## Rows: 366 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Date
## dbl (9): Longitude, Latitude, Elevation, Max Temperature, Min Temperature, P...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Aplicar Regla de Sturges
n <- length(Humedad_Relativa)
k <- ceiling(1 + 3.322 * log10(n))
# Calcular cortes y límites
cortes <- seq(min(Humedad_Relativa), max(Humedad_Relativa), length.out = k + 1)
# Crear la tabla de frecuencias
tabla_frec <- as.data.frame(table(cut(Humedad_Relativa, breaks = cortes, include.lowest = TRUE)))
# Calcular columnas
tabla_frecuencia <- tabla_frec %>%
mutate(
Li = cortes[1:k],
Ls = cortes[2:(k+1)],
MC = (Li + Ls) / 2,
ni = Freq,
hi_porc = (ni / n) * 100,
Ni_asc = cumsum(ni),
Ni_desc = rev(cumsum(rev(ni))),
Hi_asc_porc = (Ni_asc / n) * 100,
Hi_desc_porc = (Ni_desc / n) * 100
) %>%
select(Li, Ls, MC, ni, hi_porc, Ni_asc, Ni_desc, Hi_asc_porc, Hi_desc_porc)
print(tabla_frecuencia)## Li Ls MC ni hi_porc Ni_asc Ni_desc Hi_asc_porc Hi_desc_porc
## 1 0.560 0.603 0.5815 2 0.5464481 2 366 0.5464481 100.00000
## 2 0.603 0.646 0.6245 13 3.5519126 15 364 4.0983607 99.45355
## 3 0.646 0.689 0.6675 14 3.8251366 29 351 7.9234973 95.90164
## 4 0.689 0.732 0.7105 20 5.4644809 49 337 13.3879781 92.07650
## 5 0.732 0.775 0.7535 14 3.8251366 63 317 17.2131148 86.61202
## 6 0.775 0.818 0.7965 17 4.6448087 80 303 21.8579235 82.78689
## 7 0.818 0.861 0.8395 25 6.8306011 105 286 28.6885246 78.14208
## 8 0.861 0.904 0.8825 35 9.5628415 140 261 38.2513661 71.31148
## 9 0.904 0.947 0.9255 47 12.8415301 187 226 51.0928962 61.74863
## 10 0.947 0.990 0.9685 179 48.9071038 366 179 100.0000000 48.90710
ggplot(data = data.frame(Humedad_Relativa), aes(x = Humedad_Relativa)) +
geom_histogram(breaks = cortes, fill = "steelblue", color = "black") +
labs(title = "Gráfica No. 1: Distribución de Humedad Relativa",
subtitle = "Volcán Antisana (Regla de Sturges)",
x = "Humedad Relativa (%)",
y = "Cantidad de días") +
scale_x_continuous(breaks = round(cortes, 1)) +
theme_minimal()ggplot(data = data.frame(Humedad_Relativa), aes(x = Humedad_Relativa)) +
geom_histogram(breaks = cortes, fill = "steelblue", color = "black") +
scale_y_continuous(limits = c(0, n), breaks = seq(0, n, by = 50)) +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 2: Distribución de Humedad Relativa (Escala N)",
x = "Humedad Relativa (%)",
y = "Cantidad") +
theme_minimal()ggplot(data = data.frame(Humedad_Relativa), aes(x = Humedad_Relativa)) +
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes, fill = "steelblue", color = "black") +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 3: Distribución Porcentual de Humedad Relativa",
x = "Humedad Relativa (%)",
y = "Porcentaje (%)") +
theme_minimal()ggplot(data = data.frame(Humedad_Relativa), aes(x = Humedad_Relativa)) +
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes, fill = "steelblue", color = "black") +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 4: Distribución Porcentual de Humedad Relativa (Escala 100%)",
x = "Humedad Relativa (%)",
y = "Porcentaje (%)") +
theme_minimal()df_ojiva <- tabla_frecuencia %>%
select(MC, Hi_asc_porc, Hi_desc_porc) %>%
pivot_longer(cols = c(Hi_asc_porc, Hi_desc_porc),
names_to = "Tipo_Ojiva",
values_to = "Porcentaje")
ggplot(df_ojiva, aes(x = MC, y = Porcentaje, color = Tipo_Ojiva, group = Tipo_Ojiva)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
scale_color_manual(values = c("Hi_asc_porc" = "#2c7bb6", "Hi_desc_porc" = "#d7191c"),
labels = c("Ascendente (Menor que)", "Descendente (Mayor que)")) +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
labs(title = "Gráfica de Ojivas No. 5: Humedad Relativa",
subtitle = "Estación Antisana (4,048 msnm) - Año 2012",
x = "Humedad (%)",
y = "Porcentaje Acumulado (%)",
color = "Interpretación") +
theme_minimal() +
theme(legend.position = "bottom")boxplot(Humedad_Relativa,
horizontal = TRUE,
col = "skyblue",
main = "Diagrama de Cajas No. 6: Humedad Relativa",
xlab = "Humedad (%)",
border = "darkblue",
pch = 16)get_moda <- function(x) {
uniqv <- unique(x)
uniqv[which.max(tabulate(match(x, uniqv)))]
}
minimo <- min(Humedad_Relativa, na.rm = TRUE)
maximo <- max(Humedad_Relativa, na.rm = TRUE)
media <- mean(Humedad_Relativa, na.rm = TRUE)
mediana <- median(Humedad_Relativa, na.rm = TRUE)
moda <- get_moda(Humedad_Relativa)
sd_val <- sd(Humedad_Relativa, na.rm = TRUE)
cv_val <- (sd_val / media) * 100
as_val <- skewness(Humedad_Relativa, na.rm = TRUE)
k_val <- kurtosis(Humedad_Relativa, na.rm = TRUE)
indicadores <- data.frame(
Indicador = c("Mínimo", "Máximo", "Media", "Mediana", "Moda",
"SD (Desv. Est.)", "CV (Coef. Var. %)", "As (Asimetría)", "K (Curtosis)"),
Valor = c(minimo, maximo, media, mediana, moda,
sd_val, cv_val, as_val, k_val)
)
knitr::kable(indicadores, digits = 2, caption = "Indicadores Estadísticos de Humedad Relativa - Antisana")| Indicador | Valor |
|---|---|
| Mínimo | 0.56 |
| Máximo | 0.99 |
| Media | 0.90 |
| Mediana | 0.94 |
| Moda | 0.98 |
| SD (Desv. Est.) | 0.11 |
| CV (Coef. Var. %) | 12.14 |
| As (Asimetría) | -1.18 |
| K (Curtosis) | 0.20 |
El análisis de la Humedad Relativa en el Antisana revela un ambiente con alta saturación hídrica, típica de los ecosistemas de páramo y glaciares altoandinos. La Media y Mediana elevadas confirman la persistencia de condiciones húmedas, mientras que la Asimetría Negativa (común en esta variable al estar topada al 100%) indica que la mayoría de los registros se concentran en valores altos. El CV moderado sugiere una estabilidad relativa en la humedad, aunque los valores atípicos inferiores en el Diagrama de Cajas señalan eventos de sequedad atmosférica extrema que pueden incrementar la sublimación del hielo glaciar.
library(readr)
library(tidyr)
library(ggplot2)
library(e1071)
library(dplyr)
weatherdataANTISANA <- read_csv("weatherdataANTISANA.csv")## Rows: 366 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Date
## dbl (9): Longitude, Latitude, Elevation, Max Temperature, Min Temperature, P...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Aplicar Regla de Sturges
n <- length(Radiacion_Solar)
k <- ceiling(1 + 3.322 * log10(n))
# Calcular cortes y límites
cortes <- seq(min(Radiacion_Solar), max(Radiacion_Solar), length.out = k + 1)
# Crear la tabla de frecuencias
tabla_frec <- as.data.frame(table(cut(Radiacion_Solar, breaks = cortes, include.lowest = TRUE)))
# Calcular columnas
tabla_frecuencia <- tabla_frec %>%
mutate(
Li = cortes[1:k],
Ls = cortes[2:(k+1)],
MC = (Li + Ls) / 2,
ni = Freq,
hi_porc = (ni / n) * 100,
Ni_asc = cumsum(ni),
Ni_desc = rev(cumsum(rev(ni))),
Hi_asc_porc = (Ni_asc / n) * 100,
Hi_desc_porc = (Ni_desc / n) * 100
) %>%
select(Li, Ls, MC, ni, hi_porc, Ni_asc, Ni_desc, Hi_asc_porc, Hi_desc_porc)
print(tabla_frecuencia)## Li Ls MC ni hi_porc Ni_asc Ni_desc Hi_asc_porc Hi_desc_porc
## 1 1.260 4.161 2.7105 34 9.289617 34 366 9.289617 100.000000
## 2 4.161 7.062 5.6115 51 13.934426 85 332 23.224044 90.710383
## 3 7.062 9.963 8.5125 50 13.661202 135 281 36.885246 76.775956
## 4 9.963 12.864 11.4135 49 13.387978 184 231 50.273224 63.114754
## 5 12.864 15.765 14.3145 37 10.109290 221 182 60.382514 49.726776
## 6 15.765 18.666 17.2155 21 5.737705 242 145 66.120219 39.617486
## 7 18.666 21.567 20.1165 25 6.830601 267 124 72.950820 33.879781
## 8 21.567 24.468 23.0175 29 7.923497 296 99 80.874317 27.049180
## 9 24.468 27.369 25.9185 45 12.295082 341 70 93.169399 19.125683
## 10 27.369 30.270 28.8195 25 6.830601 366 25 100.000000 6.830601
ggplot(data = data.frame(Radiacion_Solar), aes(x = Radiacion_Solar)) +
geom_histogram(breaks = cortes, fill = "steelblue", color = "black") +
labs(title = "Gráfica No. 1: Distribución de Radiación Solar",
subtitle = "Volcán Antisana (Regla de Sturges)",
x = "Radiación Solar (W/m² o Ly/day)",
y = "Cantidad de días") +
scale_x_continuous(breaks = round(cortes, 1)) +
theme_minimal()ggplot(data = data.frame(Radiacion_Solar), aes(x = Radiacion_Solar)) +
geom_histogram(breaks = cortes, fill = "steelblue", color = "black") +
scale_y_continuous(limits = c(0, n), breaks = seq(0, n, by = 50)) +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 2: Distribución de Radiación Solar (Escala N)",
x = "Radiación Solar",
y = "Cantidad") +
theme_minimal()ggplot(data = data.frame(Radiacion_Solar), aes(x = Radiacion_Solar)) +
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes, fill = "steelblue", color = "black") +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 3: Distribución Porcentual de Radiación Solar",
x = "Radiación Solar",
y = "Porcentaje (%)") +
theme_minimal()ggplot(data = data.frame(Radiacion_Solar), aes(x = Radiacion_Solar)) +
geom_histogram(aes(y = after_stat(count)/sum(after_stat(count)) * 100),
breaks = cortes, fill = "steelblue", color = "black") +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
scale_x_continuous(breaks = round(cortes, 1)) +
labs(title = "Gráfica No. 4: Distribución Porcentual de Radiación Solar (Escala 100%)",
x = "Radiación Solar",
y = "Porcentaje (%)") +
theme_minimal()df_ojiva <- tabla_frecuencia %>%
select(MC, Hi_asc_porc, Hi_desc_porc) %>%
pivot_longer(cols = c(Hi_asc_porc, Hi_desc_porc),
names_to = "Tipo_Ojiva",
values_to = "Porcentaje")
ggplot(df_ojiva, aes(x = MC, y = Porcentaje, color = Tipo_Ojiva, group = Tipo_Ojiva)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
scale_color_manual(values = c("Hi_asc_porc" = "#2c7bb6", "Hi_desc_porc" = "#d7191c"),
labels = c("Ascendente (Menor que)", "Descendente (Mayor que)")) +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
labs(title = "Gráfica de Ojivas No. 5: Radiación Solar",
subtitle = "Estación Antisana (4,048 msnm) - Año 2012",
x = "Radiación Solar",
y = "Porcentaje Acumulado (%)",
color = "Interpretación") +
theme_minimal() +
theme(legend.position = "bottom")boxplot(Radiacion_Solar,
horizontal = TRUE,
col = "skyblue",
main = "Diagrama de Cajas No. 6: Radiación Solar",
xlab = "Radiación Solar",
border = "darkblue",
pch = 16)get_moda <- function(x) {
uniqv <- unique(x)
uniqv[which.max(tabulate(match(x, uniqv)))]
}
minimo <- min(Radiacion_Solar, na.rm = TRUE)
maximo <- max(Radiacion_Solar, na.rm = TRUE)
media <- mean(Radiacion_Solar, na.rm = TRUE)
mediana <- median(Radiacion_Solar, na.rm = TRUE)
moda <- get_moda(Radiacion_Solar)
sd_val <- sd(Radiacion_Solar, na.rm = TRUE)
cv_val <- (sd_val / media) * 100
as_val <- skewness(Radiacion_Solar, na.rm = TRUE)
k_val <- kurtosis(Radiacion_Solar, na.rm = TRUE)
indicadores <- data.frame(
Indicador = c("Mínimo", "Máximo", "Media", "Mediana", "Moda",
"SD (Desv. Est.)", "CV (Coef. Var. %)", "As (Asimetría)", "K (Curtosis)"),
Valor = c(minimo, maximo, media, mediana, moda,
sd_val, cv_val, as_val, k_val)
)
knitr::kable(indicadores, digits = 2, caption = "Indicadores Estadísticos de Radiación Solar - Antisana")| Indicador | Valor |
|---|---|
| Mínimo | 1.26 |
| Máximo | 30.27 |
| Media | 14.44 |
| Mediana | 12.66 |
| Moda | 7.19 |
| SD (Desv. Est.) | 8.33 |
| CV (Coef. Var. %) | 57.69 |
| As (Asimetría) | 0.30 |
| K (Curtosis) | -1.24 |
El análisis de la Radiación Solar en el volcán Antisana muestra una distribución con una variabilidad importante, típica de una zona donde la cobertura nubosa cambia drásticamente. La Media y la Mediana indican la energía promedio disponible, mientras que una Asimetría marcada y los valores extremos en el Diagrama de Cajas resaltan los días de “cielo despejado” con alta incidencia de radiación de onda corta. Estos picos de radiación, combinados con la baja presión atmosférica de la altitud, son el factor energético primario que impulsa la ablación glaciar en el sitio de estudio.