Este ecosistema es fundamental para el equilibrio ecológico de la región. Actúa como una fuente de agua vital, alimentando ríos y lagunas que abastecen a comunidades cercanas, incluida la ciudad de Quito. Su funcionamiento y biodiversidad están regulados por una combinación de factores clave:
Climáticos: La temperatura y las precipitaciones.
Geográficos: La altitud y la latitud.
Atmosféricos: Los patrones de vientos.
El análisis estadístico del clima en el Volcán Antisana es fundamental para transformar datos climáticos en información cuantificable que permita optimizar la gestión del agua, evaluar riesgos naturales y proteger sus ecosistemas. Para lograrlo, este estudio se centrará en el caso específico de la Reserva Ecológica Antisana, utilizando datos confiables recopilados de fuentes científicas y plataformas especializadas, con el objetivo de generar conclusiones objetivas que faciliten la toma de decisiones en conservación y planificación sostenible.
Aplicar la estadística, Machine Learning 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, mediante el uso de herramientas computacionales.
Conocer la situación actual de los datos climáticos del volcán Antisana a través de sus características más importantes y medidas estadísticas.
Emplear un modelo de probabilidad para establecer conclusiones sobre el clima del Volcán Antisana a partir de los resultados de muestra.
Deducir 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.
Textual: Todos los registros climáticos históricos y actuales asociados al Volcán Antisana y su área de influencia, independientemente de su estado operativo.
Simbólico: \(U = \{ x/x \in \text{Registros Climáticos} \land \text{Ubicación}(x) = \text{"Volcán Antisana"}\}\)
Textual: Cada registro climático individual dentro de la población.
Simbólico: \(X_i \text{ donde i = 1, 2, 3, 4, ..., +∞}\)
Textual: Un subconjunto representativo de registros climáticos correspondiente al período de estudio específico, obtenido de fuentes validadas como INAMHI y estaciones meteorológicas de la reserva.
Simbólico: \(M = \{ x/x \text{Registros Climáticos} \land \text{Ubicación}(x) = \text{"Volcán Antisana"} \land \text{Fecha}(x) = \text{[01/01/2012, 31/12/2012]}\)
Textual: Cada registro climático dentro del período y área definidos, analizado para caracterizar el comportamiento climático y su impacto en los ecosistemas y recursos hídricos de la Reserva Antisana.
Simbólico: \(X_i \text{ donde i = 1, 2, 3, 4, ..., 366}\)
📊 Ver tabla de variables en Google Sheets:
👉 Abrir
tabla de variables
📥 Descargar tabla de variables (Excel):
👉 Descargar
archivo Excel
📊 Ver tabla de indicadores en Google Sheets:
👉 Abrir
tabla de indicadores
📥 Descargar tabla de indicadores (Excel):
👉 Descargar
archivo Excel
## ── 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: 'e1071'
##
## The following object is masked from 'package:ggplot2':
##
## element
library(readr)
library(gt)
library(ggplot2)
setwd("~/PROYECTO ANTISANA")
Datos <- 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.
## spc_tbl_ [366 × 10] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ date : chr [1:366] "01/01/2012" "02/01/2012" "03/01/2012" "04/01/2012" ...
## $ longitude : num [1:366] -78.1 -78.1 -78.1 -78.1 -78.1 ...
## $ latitude : num [1:366] -0.468 -0.468 -0.468 -0.468 -0.468 ...
## $ elevation : num [1:366] 4048 4048 4048 4048 4048 ...
## $ max_temperature : num [1:366] 16.1 15.5 11.6 12 11.7 ...
## $ min_temperature : num [1:366] 6.91 9.23 8.69 9.53 7.9 ...
## $ precipitation : num [1:366] 8.49 35.44 41.53 15.48 28.71 ...
## $ wind : num [1:366] 1.76 1.86 1.74 1.48 1.49 1.51 1.81 1.68 1.23 1.61 ...
## $ relative_humidity: num [1:366] 0.93 0.96 0.98 0.99 0.98 0.97 0.98 0.99 0.99 0.98 ...
## $ solar : num [1:366] 15.98 12.25 4.58 4.32 3.86 ...
## - attr(*, "spec")=
## .. cols(
## .. date = col_character(),
## .. longitude = col_double(),
## .. latitude = col_double(),
## .. elevation = col_double(),
## .. max_temperature = col_double(),
## .. min_temperature = col_double(),
## .. precipitation = col_double(),
## .. wind = col_double(),
## .. relative_humidity = col_double(),
## .. solar = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
# 1. Extraer variable: Max Temperature
# Asegúrate de que el nombre de la columna sea exacto (ej. Datos$max_temp)
Variable <- na.omit(Datos$max_temperature)
N <- length(Variable)
# --- CÁLCULO LÍMITES DECIMALES ---
min_dec <- min(Variable)
max_dec <- max(Variable)
k_dec <- floor(1 + 3.322 * log10(N))
rango_dec <- max_dec - min_dec
amplitud_dec <- rango_dec / k_dec
cortes_dec <- seq(min_dec, max_dec, length.out = k_dec + 1)
cortes_dec[length(cortes_dec)] <- max_dec + 0.0001
inter_dec <- cut(Variable, breaks = cortes_dec, include.lowest = TRUE, right = FALSE)
ni_dec <- as.vector(table(inter_dec))
hi_dec <- (ni_dec / N) * 100
Ni_asc_dec <- cumsum(ni_dec)
Hi_asc_dec <- cumsum(hi_dec)
Ni_desc_dec <- rev(cumsum(rev(ni_dec)))
Hi_desc_dec <- rev(cumsum(rev(hi_dec)))
TDF_Decimal <- data.frame(
Li = cortes_dec[1:k_dec],
Ls = cortes_dec[2:(k_dec+1)],
MC = (cortes_dec[1:k_dec] + cortes_dec[2:(k_dec+1)]) / 2,
ni = ni_dec,
hi = hi_dec,
Ni_asc = Ni_asc_dec,
Ni_desc = Ni_desc_dec,
Hi_asc = Hi_asc_dec,
Hi_desc = Hi_desc_dec)
# --- CÁLCULO LÍMITES ENTEROS ---
BASE <- 1 # Ajustado a 1 para temperaturas, ya que 10 es un rango muy amplio
min_int <- floor(min(Variable) / BASE) * BASE
max_int <- ceiling(max(Variable) / BASE) * BASE
k_int_sug <- floor(1 + 3.322 * log10(N))
Rango_int <- max_int - min_int
Amplitud_raw <- Rango_int / k_int_sug
Amplitud_int <- ceiling(Amplitud_raw)
if(Amplitud_int == 0) Amplitud_int <- 1
cortes_int <- seq(from = min_int, by = Amplitud_int, length.out = k_int_sug + 2)
while(max(cortes_int) < max(Variable)) {
cortes_int <- c(cortes_int, max(cortes_int) + Amplitud_int)
}
K_real <- length(cortes_int) - 1
lim_inf_int <- cortes_int[1:K_real]
lim_sup_int <- cortes_int[2:(K_real+1)]
inter_int <- cut(Variable, breaks = cortes_int, include.lowest = TRUE, right = FALSE)
ni_int <- as.vector(table(inter_int))
hi_int <- (ni_int / N) * 100
Ni_asc_int <- cumsum(ni_int)
Hi_asc_int <- cumsum(hi_int)
Ni_desc_int <- rev(cumsum(rev(ni_int)))
Hi_desc_int <- rev(cumsum(rev(hi_int)))
TDF_Enteros <- data.frame(
Li = lim_inf_int, Ls = lim_sup_int,
MC = (lim_inf_int + lim_sup_int) / 2,
ni = ni_int, hi = hi_int,
Ni_asc = Ni_asc_int, Ni_desc = Ni_desc_int,
Hi_asc = Hi_asc_int, Hi_desc = Hi_desc_int)
# --- TABLAS GT ---
# Tabla Decimal
TDF_Dec_Final <- data.frame(
Li = as.character(round(TDF_Decimal$Li, 2)),
Ls = as.character(round(TDF_Decimal$Ls, 2)),
MC = as.character(round(TDF_Decimal$MC, 2)),
ni = as.character(TDF_Decimal$ni),
hi = as.character(round(TDF_Decimal$hi, 2)),
Ni_asc = as.character(TDF_Decimal$Ni_asc),
Ni_desc = as.character(TDF_Decimal$Ni_desc),
Hi_asc = as.character(round(TDF_Decimal$Hi_asc, 2)),
Hi_desc = as.character(round(TDF_Decimal$Hi_desc, 2))
)
totales_dec <- c("TOTAL", "-", "-", sum(TDF_Decimal$ni), round(sum(TDF_Decimal$hi), 2), "-", "-", "-", "-")
TDF_Dec_Final <- rbind(TDF_Dec_Final, totales_dec)
TDF_Dec_Final %>% gt() %>%
tab_header(title = md("**Tabla N°1: Frecuencias de Temperatura Máxima (°C) - Volcán Antisana**")) %>%
cols_label(Li="Lim. Inf", Ls="Lim. Sup", MC="Marca Clase", ni="ni", hi="hi (%)", Ni_asc="Ni Asc", Ni_desc="Ni Desc", Hi_asc="Hi Asc %", Hi_desc="Hi Desc %") %>%
cols_align(align = "center") %>%
tab_options(heading.title.font.size = px(14), column_labels.background.color = "#F0F0F0")| Tabla N°1: Frecuencias de Temperatura Máxima (°C) - Volcán Antisana | ||||||||
| Lim. Inf | Lim. Sup | Marca Clase | ni | hi (%) | Ni Asc | Ni Desc | Hi Asc % | Hi Desc % |
|---|---|---|---|---|---|---|---|---|
| 10.32 | 11.82 | 11.07 | 26 | 7.1 | 26 | 366 | 7.1 | 100 |
| 11.82 | 13.31 | 12.56 | 60 | 16.39 | 86 | 340 | 23.5 | 92.9 |
| 13.31 | 14.81 | 14.06 | 71 | 19.4 | 157 | 280 | 42.9 | 76.5 |
| 14.81 | 16.31 | 15.56 | 60 | 16.39 | 217 | 209 | 59.29 | 57.1 |
| 16.31 | 17.8 | 17.06 | 62 | 16.94 | 279 | 149 | 76.23 | 40.71 |
| 17.8 | 19.3 | 18.55 | 44 | 12.02 | 323 | 87 | 88.25 | 23.77 |
| 19.3 | 20.8 | 20.05 | 23 | 6.28 | 346 | 43 | 94.54 | 11.75 |
| 20.8 | 22.29 | 21.55 | 14 | 3.83 | 360 | 20 | 98.36 | 5.46 |
| 22.29 | 23.79 | 23.04 | 6 | 1.64 | 366 | 6 | 100 | 1.64 |
| TOTAL | - | - | 366 | 100 | - | - | - | - |
# --- ANÁLISIS GRÁFICO ---
# Histograma de Frecuencia Absoluta
par(mar = c(6, 5, 5, 2))
barplot(TDF_Enteros$ni, names.arg = TDF_Enteros$MC, col = "#FFB347",
ylab = "Frecuencia (n)", xlab = "", las = 1, space = 0)
mtext("Temperatura Máxima (°C)", side = 1, line = 3)
mtext("Gráfica N°1: Distribución de Temperatura Máxima en el Volcán Antisana", side = 3, line = 2, font = 2)# Boxplot
par(mar = c(5, 5, 4, 2))
boxplot(Variable, horizontal = TRUE, col = "#FFB347", xlab = "Temperatura Máxima (°C)",
main = "Gráfica N°2: Boxplot de Temperatura Máxima - Volcán Antisana")# --- INDICADORES ESTADÍSTICOS ---
library(e1071) # Para asimetría y curtosis
media <- round(mean(Variable), 2)
mediana <- round(median(Variable), 2)
max_frecuencia <- max(TDF_Enteros$ni)
moda_vals <- TDF_Enteros$MC[TDF_Enteros$ni == max_frecuencia]
moda_txt <- paste(round(moda_vals, 2), collapse = ", ")
varianza <- var(Variable)
sd_val <- sd(Variable)
cv <- round((sd_val / abs(media)) * 100, 2)
asimetria <- skewness(Variable)
curtosis <- kurtosis(Variable)
# Outliers
Q1 <- quantile(Variable, 0.25); Q3 <- quantile(Variable, 0.75)
IQR_val <- Q3 - Q1
lim_inf <- Q1 - 1.5 * IQR_val; lim_sup <- Q3 + 1.5 * IQR_val
outliers_data <- Variable[Variable < lim_inf | Variable > lim_sup]
num_outliers <- length(outliers_data)
rango_outliers <- ifelse(num_outliers > 0, paste0(num_outliers, " [", round(min(outliers_data), 2), "; ", round(max(outliers_data), 2), "]"), "0 [Sin Outliers]")
tabla_indicadores <- data.frame(
"Variable" = "Temperatura Máxima (°C)",
"Rango" = paste0("[", round(min(Variable), 2), "; ", round(max(Variable), 2), "]"),
"X" = media, "Me" = mediana, "Mo" = moda_txt, "V" = round(varianza, 2),
"Sd" = round(sd_val, 2), "Cv" = cv, "As" = round(asimetria, 2), "K" = round(curtosis, 2),
"Outliers" = rango_outliers)
tabla_indicadores %>% gt() %>%
tab_header(title = md("**Tabla N°3: Resumen Estadístico - Volcán Antisana**")) %>%
tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
cols_label(X="Media", Me="Mediana", Mo="Moda", V="Varianza", Sd="Desv. Est.", Cv="C.V. %", As="Asimetría", K="Curtosis")| Tabla N°3: Resumen Estadístico - Volcán Antisana | ||||||||||
| Variable | Rango | Media | Mediana | Moda | Varianza | Desv. Est. | C.V. % | Asimetría | Curtosis | Outliers |
|---|---|---|---|---|---|---|---|---|---|---|
| Temperatura Máxima (°C) | [10.32; 23.79] | 15.74 | 15.51 | 13 | 8.22 | 2.87 | 18.22 | 0.39 | -0.56 | 0 [Sin Outliers] |
| Autor: Martin Sarmiento | ||||||||||
## --- CONCLUSIONES ---
"La variable “Temperatura Máxima” presenta una variabilidad climática específica en el entorno del Volcán Antisana, con valores comprendidos entre r round(min(Variable), 2)°C y r round(max(Variable), 2)°C, concentrándose alrededor de su media aritmética. La dispersión observada indica una estabilidad térmica propia de la zona, mientras que la presencia de valores atípicos sugiere eventos climáticos aislados o microclimas particulares que influyen en el comportamiento térmico del ecosistema del volcán."## [1] "La variable “Temperatura Máxima” presenta una variabilidad climática específica en el entorno del Volcán Antisana, con valores comprendidos entre r round(min(Variable), 2)°C y r round(max(Variable), 2)°C, concentrándose alrededor de su media aritmética. La dispersión observada indica una estabilidad térmica propia de la zona, mientras que la presencia de valores atípicos sugiere eventos climáticos aislados o microclimas particulares que influyen en el comportamiento térmico del ecosistema del volcán."