En el presente documento se desarrolla un análisis estadístico descriptivo de la variable cuantitativa discreta Periodo de Retorno, expresada en años, la cual representa el intervalo promedio de tiempo estimado entre la ocurrencia de eventos de una determinada magnitud. El análisis comprende la preparación de los datos, la elaboración de tablas de frecuencias, la construcción de representaciones gráficas y el cálculo de medidas descriptivas adecuadas para variables discretas, con el fin de interpretar las características principales del periodo de recurrencia observado.

1 CARGA DE LIBRERÍAS Y DATOS

1.1 Carga de librerias

library(tidyverse)
library(DT)
library(plotly)
library(knitr)
library(gt)
library(readr)
library(knitr)
library(kableExtra)
library(moments)
library(e1071)

1.2 Lectura del Dataset

Volcanes_Globales <- read.csv("global_volcano_eruption_intelligence.csv", header = T, sep = ";", dec = ".")

2 SELECCIÓN DE VARIABLE

retorno_V <- Volcanes_Globales$avg_eruption_return_period_years

2.1 Limpieza de Datos

retorno_V <- na.omit(retorno_V)
sum(is.na(retorno_V))
## [1] 0

3 CALCULO DE FRECUENCIAS

Creamos intervalos debido al gran numero de observaciones de la variable periodo de retorno.

3.1 Intervalos por Sturges

# Calcular n (numero de datos)
n <- length(retorno_V)
length(retorno_V)
## [1] 769
# Calcular intervalos con Sturges
k <- round(1 + 3.322 * log10(n))
k  #Se obtienen 11 intervalos
## [1] 11

Creamos a criterio 6 intervalos debido a la existencia de intervalos sin observaciones ademas para una mejor comprensión y visualización de los registros.

#Creacion de intervalos
Li <- c(0, 700, 1400, 2100, 2800, 3500)

Ls <- c(700, 1400, 2100, 2800, 3500, 4200)

Intervalo <- c(
  "[0 - 700)",
  "[700 - 1400)",
  "[1400 - 2100)",
  "[2100 - 2800)",
  "[2800 - 3500)",
  "[3500 - 4200]"
)

#Marcas de clase
MC <- round((Li + Ls)/2,0)

3.2 Cálculo de ni y hi

#Frecuencia Absoluta ni
ni <- numeric(length(Li))

for(i in 1:length(Li)){
  if(i < length(Li)){
    ni[i] <- sum(retorno_V >= Li[i] & retorno_V < Ls[i])
  } else {
    ni[i] <- sum(retorno_V >= Li[i] & retorno_V <= Ls[i])
  }
  
}

#Frecuencia relativa hi
hi <- (ni/n)*100

#Frecuencias Acumuladas Ascendentes
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))

#Frecuencias Acumuladas Descendentes
Hi_asc <- cumsum(hi)
Hi_dsc <- rev(cumsum(rev(hi)))

#dataframe
TDF <- data.frame(
  Intervalo = Intervalo,
  MC = MC,
  ni = ni,
  Ni_asc = Ni_asc,
  Ni_dsc = Ni_dsc,
  hi = round(hi, 2),
  Hi_asc = round(Hi_asc, 2),
  Hi_dsc = round(Hi_dsc, 2)
)

# Fila de Total
fila_total <- data.frame(
  Intervalo = "TOTAL",
  MC = "--",
  ni = sum(TDF$ni),
  Ni_asc = "--",
  Ni_dsc = "--",
  hi = 100,
  Hi_asc = "--",
  Hi_dsc = "--"
)

# Unir fila Total con la tabla
TDFimpacto_V <- rbind(TDF, fila_total)

# Mostrar Tabla
TDFimpacto_V

4 TABLA DE DISTRIBUCIÓN DE FRECUENCIAS (TDFs)

Tabla N° 1
Distribución de frecuencias del período promedio de retorno en años de las erupciones volcánicas
Intervalo de clase Marca de
clase
(MC)
Frecuencia
absoluta
ni
Frecuencia
relativa
hi (%)
Ni Hi Ni Hi
[0 - 700) 350 722 93.89 769 100 722 93.89
[700 - 1400) 1050 30 3.90 47 6.11 752 97.79
[1400 - 2100) 1750 11 1.43 17 2.21 763 99.22
[2100 - 2800) 2450 2 0.26 6 0.78 765 99.48
[2800 - 3500) 3150 0 0.00 4 0.52 765 99.48
[3500 - 4200] 3850 4 0.52 4 0.52 769 100
TOTAL -- 769 100.00 -- -- -- --
Elaborado por: Grupo 2 - Carrera de Geología.

5 GRÁFICAS DE DISTRIBUCIÓN DE FRECUENCIAS (GDFs)

5.1 Diagrama de barras de Frecuencia Absoluta Local

# Etiquetas de los intervalos
intervalos <- paste0(round(Li, 2), " - ", round(Ls, 2))

# Margen inferior amplio
par(mar = c(8, 4, 4, 2))

# Diagrama de barras
barplot(
  ni,
  names.arg = intervalos,
  col = "red",
  border = "black",
  space = 0,
  las = 1,         
  cex.names = 0.9,
  main = "Gráfica 1: Distribución de la frecuencia absoluta\n del periodo de retorno en años de los volcanes (local)",
  xlab = "Periodo de retorno (años)",
  ylab = "Cantidad"
)

5.2 Diagrama de barras de Frecuencia Absoluta Global

# Etiquetas de los intervalos
intervalos <- paste0(round(Li, 2), " - ", round(Ls, 2))

# Margen inferior amplio
par(mar = c(8, 4, 4, 2))

# Diagrama de barras
barplot(
  ni,
  names.arg = intervalos,
  col = "red",
  border = "black",
  space = 0,
  las = 1,         
  cex.names = 0.9,
  main = "Gráfica 1: Distribución de la frecuencia absoluta\n del periodo de retorno en años de los volcanes (global)",
  xlab = "Periodo de retorno (años)",
  ylab = "Cantidad",
  ylim = c(0, 898)
)

5.3 Diagrama de barras de Frecuencia Relativa Local

# Etiquetas de los intervalos
intervalos <- paste0(round(Li, 2), " - ", round(Ls, 2))

# Margen inferior amplio
par(mar = c(8, 4, 4, 2))

# Diagrama de barras
barplot(
  hi,
  names.arg = intervalos,
  col = "orange",
  border = "black",
  space = 0,
  las = 1,         
  cex.names = 0.9,
  main = "Gráfica 1: Distribución de la frecuencia relativa\n del periodo de retorno en años de los volcanes (local)",
  xlab = "Periodo de retorno (años)",
  ylab = "Porcentaje %"
  
)

5.4 diagrama de barras de Frecuencia Relativa Global

# Etiquetas de los intervalos
intervalos <- paste0(round(Li, 2), " - ", round(Ls, 2))

# Margen inferior amplio
par(mar = c(8, 4, 4, 2))

# Diagrama de barras
pos_x <- barplot(
  hi,
  names.arg = intervalos,
  col = "orange",
  border = "black",
  space = 0,
  las = 1,
  cex.names = 0.9,
  main = "Gráfica 1: Distribución de la frecuencia relativa\n del periodo de retorno en años de los volcanes (global)",
  xlab = "Periodo de retorno (años)",
  ylab = "Porcentaje (%)",
  ylim = c(0, 100)
)

# Añadir polígono de frecuencias
lines(
  x = pos_x,
  y = hi,
  type = "o",
  lwd = 2,
  pch = 16,
  col = "brown"
)

6 DIAGRAMA DE OJIVAS

6.1 Diagrama de Ojivas de frecuencias acumuladas Ni

# Margen inferior amplio
par(mar = c(8, 4, 4, 2))

# Coordenadas para las ojivas
x <- c(Li, max(Ls))

Ni_asc_ojiva <- c(0, Ni_asc)
Ni_dsc_ojiva <- c(sum(ni), Ni_dsc)

# Ojiva ascendente
plot(
  x,
  Ni_asc_ojiva,
  type = "o",
  pch = 16,
  col = "blue",
  xaxt = "n",
  ylim = c(0, sum(ni)),
  xlim = c(min(x), max(x)),
  xlab = "Periodo de retorno (años)",
  ylab = "Frecuencia absoluta acumulada (Ni)",
  main = "Gráfica 4: Ojivas de frecuencias absolutas acumuladas"
)

# Ojiva descendente
lines(
  x,
  Ni_dsc_ojiva,
  type = "o",
  pch = 16,
  col = "red"
)

# Eje X
axis(
  side = 1,
  at = x,
  labels = x,
  cex.axis = 0.8
)

# Leyenda
legend(
  "right",
  legend = c("Ni ascendente", "Ni descendente"),
  col = c("blue", "red"),
  pch = 16,
  lty = 1,
  lwd = 2,
  bty = "n"
)

6.2 Diagrama de Ojivas de frecuencias acumuladas Ni

# Margen inferior amplio
par(mar = c(8, 4, 4, 2))

# Coordenadas para las ojivas
x <- c(Li, max(Ls))

Hi_asc_ojiva <- c(0, Hi_asc)
Hi_dsc_ojiva <- c(100, Hi_dsc)

# Ojiva ascendente
plot(
  x,
  Hi_asc_ojiva,
  type = "o",
  pch = 16,
  col = "blue",
  xaxt = "n",
  ylim = c(0, 100),
  xlim = c(min(x), max(x)),
  xlab = "Periodo de retorno (años)",
  ylab = "Porcentaje %",
  main = "Gráfica 5: Ojivas de frecuencias relativas acumuladas"
)

# Ojiva descendente
lines(
  x,
  Hi_dsc_ojiva,
  type = "o",
  pch = 16,
  col = "red"
)

# Eje X
axis(
  side = 1,
  at = x,
  labels = x,
  cex.axis = 0.8
)

# Leyenda
legend(
  "right",
  legend = c("Hi ascendente", "Hi descendente"),
  col = c("blue", "red"),
  pch = 16,
  lty = 1,
  lwd = 2,
  bty = "n"
)

7 DIAGRAMA DE CAJAS Y BIGOTES

# ============================
# CÁLCULO DE ESTADÍSTICOS
# ============================

media_box <- mean(retorno_V)

mediana_box <- median(retorno_V)

Q1_box <- quantile(retorno_V, 0.25)

Q3_box <- quantile(retorno_V, 0.75)

IQR_box <- IQR(retorno_V)

# ============================
# CÁLCULO DE VALORES ATÍPICOS
# ============================

lim_inf_outlier_box <- Q1_box - 1.5 * IQR_box

lim_sup_outlier_box <- Q3_box + 1.5 * IQR_box

outliers_box <- retorno_V[
  retorno_V < lim_inf_outlier_box |
    retorno_V > lim_sup_outlier_box
]

n_outliers_box <- length(outliers_box)

# ============================
# DIAGRAMA DE CAJA Y BIGOTES
# ============================

par(mar = c(5, 4, 4, 2))

boxplot(
  retorno_V,
  horizontal = TRUE,
  col = "lightblue",
  border = "darkblue",
  main = "Gráfica 7: Distribución del período promedio de retorno\nde las erupciones volcánicas con detección de valores atípicos",
  xlab = "Período promedio de retorno (años)",
  ylab = ""
)

# ============================
# MEDIA
# ============================

points(
  media_box,
  1,
  pch = 23,
  bg = "red",
  cex = 1.3
)

# ============================
# LEYENDA
# ============================

legend(
  "topright",
  legend = c(
    paste("Media:", round(media_box, 2)),
    paste("Mediana:", round(mediana_box, 2)),
    paste("Q1:", round(Q1_box, 2)),
    paste("Q3:", round(Q3_box, 2)),
    paste("Outliers:", n_outliers_box)
  ),
  bty = "n",
  cex = 0.85
)

8 INDICADORES ESTADISTICOS

# ============================
# INDICADORES DE TENDENCIA CENTRAL
# ============================

X <- mean(retorno_V)

Me <- median(retorno_V)

Mo <- as.numeric(names(sort(table(retorno_V), decreasing = TRUE)[1]))

# ============================
# INDICADORES DE DISPERSIÓN
# ============================

var_retornoV <- var(retorno_V)

desv <- sd(retorno_V)

CV <- (desv / X) * 100

# ============================
# INDICADORES DE FORMA
# ============================

As <- skewness(retorno_V)

K <- kurtosis(retorno_V)

# ============================
# DATOS PARA LA TABLA
# ============================

Variable <- "Período de retorno"

min_retornoV <- min(retorno_V)

max_retornoV <- max(retorno_V)

Rango <- paste0(
  "[",
  min_retornoV,
  " - ",
  max_retornoV,
  "]"
)

# ============================
# VALORES ATÍPICOS
# ============================

atipicos_reales <- boxplot.stats(retorno_V)$out

if(length(atipicos_reales) == 0){
  
  valoresatipicos <- "0"
  
} else {
  
  valoresatipicos <- paste0(
    length(atipicos_reales),
    " (> ",
    round(min(atipicos_reales), 2),
    ")"
  )
  
}

8.1 Tabla resumen

Tabla Nro. 2
Indicadores estadísticos del periodo de retorno de los volcanes activos a nivel mundial
Variable Rango X Me Mo sd CV As K Valores.atípicos
Período de retorno [0 - 3700] 162.3 45 15.9 403.47 248.59 5.2 33.29 126
Elaborado por: Grupo 2 - Carrera de Geología.

9 CONCLUSIONES

La variable período promedio de retorno de las erupciones volcánicas fluctúa entre 0 y 3700, y sus valores giran en torno a una media de 162.3, con una desviación estándar de 403.47, lo que evidencia un conjunto de datos muy heterogéneo. Los valores se concentran fuertemente en los períodos de retorno más bajos, presentando una marcada asimetría positiva. Además, se identifican 126 valores atípicos dentro del intervalo de 0 a 3700 años, lo que refleja la existencia de volcanes con períodos de retorno excepcionalmente altos respecto al resto de las observaciones.