En el presente documento se desarrolla un análisis estadístico descriptivo de la variable cuantitativa continua Altura de la Pluma, expresada en kilómetros, la cual representa la altura máxima alcanzada por la columna eruptiva durante una erupción volcánica. 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 continuas, con el fin de interpretar las principales características de la distribución de la altura de la pluma en las erupciones volcánicas.

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

altura_pluma <- Volcanes_Globales$est_plume_height_km

2.1 Limpieza de Datos

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

3 CALCULO DE FRECUENCIAS

3.1 Intervalos por Sturges

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

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, 10, 20, 30)

Ls <- c(10, 20, 30, 40)

Intervalo <- c(
  "[0 - 10)",
  "[10 - 20)",
  "[20 - 30)",
  "[30 - 40]"
)

#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(altura_pluma >= Li[i] & altura_pluma < Ls[i])
  } else {
    ni[i] <- sum(altura_pluma >= Li[i] & altura_pluma <= 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
TDFaltura_pluma <- rbind(TDF, fila_total)

# Mostrar Tabla
TDFaltura_pluma

4 TABLA DE DISTRIBUCIÓN DE FRECUENCIAS (TDFs)

Tabla N° 1
Distribución de frecuencias de la altura de la pluma (km) de los volcanes activos
Intervalo de clase Marca de
clase
(MC)
Frecuencia
absoluta
ni
Frecuencia
relativa
hi (%)
Ni Hi Ni Hi
[0 - 10) 5 530 74.23 714 100 530 74.23
[10 - 20) 15 114 15.97 184 25.77 644 90.2
[20 - 30) 25 30 4.20 70 9.8 674 94.4
[30 - 40] 35 40 5.60 40 5.6 714 100
TOTAL -- 714 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

# margen inferior amplio
par(mar = c(5, 4, 4, 2))

# graficar barras de frecuencia absoluta

pos_x <- barplot(
  ni,
  col = "red",
  border = "black",
  space = 0,
  las = 1,
  main = "Gráfica 1: Distribución de la frecuencia absoluta\n de la altura de la pluma de los volcanes activos (local)",
  xlab = "Periodo de retorno (años)",
  ylab = "Cantidad",
  axes = TRUE
)

# límites de clase para eje X
cortes_x <- c(Li, max(Ls))

# colocar eje X manualmente
axis(
  side = 1,
  at = seq(0, length(ni), length.out = length(cortes_x)),
  labels = cortes_x,
  cex.axis = 0.7
)

5.2 Diagrama de barras de Frecuencia Absoluta Global

# margen inferior amplio
par(mar = c(5, 4, 4, 2))

# graficar barras de frecuencia absoluta

pos_x <- barplot(
  ni,
  col = "red",
  border = "black",
  space = 0,
  las = 1,
  main = "Gráfica 2: Distribución de la frecuencia absoluta\n dela altura de la pluma de los volcanes activos (global)",
  xlab = "Periodo de retorno (años)",
  ylab = "Cantidad",
  ylim = c(0, n),
  axes = TRUE
)

# límites de clase para eje X
cortes_x <- c(Li, max(Ls))

# colocar eje X manualmente
axis(
  side = 1,
  at = seq(0, length(ni), length.out = length(cortes_x)),
  labels = cortes_x,
  cex.axis = 0.7
)

5.3 Diagrama de barras de Frecuencia Relativa Local

#Grafica local

# margen inferior amplio
par(mar = c(5, 4, 4, 2))

# graficar barras
pos_x <- barplot(
  hi,
  col = "orange",
  border = "black",
  space = 0,
  las = 1,
  main = "Gráfica 3: Distribución de la frecuencia relativa \nde la altura de la pluma de los volcanes activos (local)",
  xlab = "Periodo de retorno (años)",
  ylab = "Porcentaje %",
  axes = TRUE
)

# límites de clase para eje X
cortes_x <- c(Li, max(Ls))

# colocar eje X manualmente
axis(
  side = 1,
  at = 0:length(hi),
  labels = cortes_x,
  cex.axis = 0.7
)

5.4 diagrama de barras de Frecuencia Relativa Global

# margen inferior amplio
par(mar = c(5, 4, 4, 2))

# graficar barras
pos_x <- barplot(
  hi,
  col = "orange",
  border = "black",
  space = 0,
  las = 1,
  main = "Gráfica 3: Distribución de la frecuencia relativa \ndela altura de la pluma de los volcanes activos (global)",
  xlab = "Periodo de retorno (años)",
  ylab = "Porcentaje %",
  ylim = c(0,100),
  axes = TRUE
)

# límites de clase para eje X
cortes_x <- c(Li, max(Ls))

# colocar eje X manualmente
axis(
  side = 1,
  at = 0:length(hi),
  labels = cortes_x,
  cex.axis = 0.7
)

# 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 = "Altura de la pluma (km)",
  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 = "Altura de la pluma (km)",
  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(altura_pluma)

mediana_box <- median(altura_pluma)

Q1_box <- quantile(altura_pluma, 0.25)

Q3_box <- quantile(altura_pluma, 0.75)

IQR_box <- IQR(altura_pluma)

# ============================
# 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 <- altura_pluma[
  altura_pluma < lim_inf_outlier_box |
    altura_pluma > lim_sup_outlier_box
]

n_outliers_box <- length(outliers_box)

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

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

boxplot(
  altura_pluma,
  horizontal = TRUE,
  col = "lightblue",
  border = "darkblue",
  main = "Gráfica 7: Distribución de la altura de la pluna \nde los volcanes activos 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(altura_pluma)

Me <- median(altura_pluma)

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

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

var_retornoV <- var(altura_pluma)

desv <- sd(altura_pluma)

CV <- (desv / X) * 100

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

As <- skewness(altura_pluma)

K <- kurtosis(altura_pluma)

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

Variable <- "Altura de la pluma (km)"

min_altura_pluma <- min(altura_pluma)

max_altura_pluma <- max(altura_pluma)

Rango <- paste0(
  "[",
  min_altura_pluma,
  " - ",
  max_altura_pluma,
  "]"
)

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

atipicos_reales <- boxplot.stats(altura_pluma)$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 dela altura de la pluma de los volcanes activos a nivel mundial
Variable Rango X Me Mo sd CV As K Valores.atípicos
Altura de la pluma (km) [0.1 - 40] 5.47 3 1 7.78 142.22 2.28 4.77 40
Elaborado por: Grupo 2 - Carrera de Geología.

9 CONCLUSIONES

La variable altura de la pluma de las erupciones volcánicas fluctúa entre 0.1 y 40, y sus valores giran en torno a una media de 5.47, con una desviación estándar de 7.78, lo que evidencia un conjunto de datos muy heterogéneo. Los valores se concentran fuertemente en las alturas de pluma más bajas, presentando una marcada asimetría positiva. Además, se identifica un valor atípico dentro del intervalo de 0.1 a 40 km, lo que refleja la existencia de una erupción con una altura de pluma excepcionalmente alta respecto al resto de las observaciones.