En el presente documento se desarrolla un análisis estadístico descriptivo de la variable cuantitativa continua Área de los países con volcanes activos, expresada en kilómetros cuadrados (km²), la cual representa la extensión territorial de los países donde se registran volcanes activos a nivel mundial. El análisis comprende la preparación y depuració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 del área territorial de los países con presencia de actividad volcánica.

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

num_V <- Volcanes_Globales$volcano_eruption_count_in_dataset

2.1 Limpieza de Datos

sum(is.na(num_V))
## [1] 0

3 CALCULO DE FRECUENCIAS

3.1 Intervalos por Sturges

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

Creamos a criterio 6 intervalos para una mejor comprension y visualizacion de los registros

#Creacion de intervalos
Li <- c(0, 5, 10, 15, 20, 25)
Ls <- c(5, 10, 15, 20, 25, 30)

Intervalo <- c(
  "[0 - 5)",
  "[5 - 10)",
  "[10 - 15)",
  "[15 - 20)",
  "[20 - 25)",
  "[25 - 30]"
)

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

# Mostrar Tabla
TDFnum_V

4 TABLA DE DISTRIBUCIÓN DE FRECUENCIAS (TDFs)

Tabla N° 1
Distribución de frecuencias del número de volcanes por categoría
Intervalo de clase Marca de
clase
(MC)
Frecuencia
absoluta
ni
Frecuencia
relativa
hi
Ni Hi Ni Hi
[0 - 5) 2 385 42.87 898 100 385 42.87
[5 - 10) 8 206 22.94 513 57.13 591 65.81
[10 - 15) 12 63 7.02 307 34.19 654 72.83
[15 - 20) 18 166 18.49 244 27.17 820 91.31
[20 - 25) 22 0 0.00 78 8.69 820 91.31
[25 - 30] 28 78 8.69 78 8.69 898 100
TOTAL -- 898 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 del número de erupciones (local)",
  xlab = "Número de erupciones",
  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.9
)

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 del número de erupciones (global)",
  xlab = "Número de erupciones",
  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.9
)

5.3 Diagrama de barras de Frecuencia Relativa 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 \ndel número de erupciones",
  xlab = "Número de erupciones (local)",
  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.9
)

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 \ndel número de erupciones (global)",
  xlab = "Número de erupciones",
  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.9
)

# 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 = "Número de erupciones",
  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 = "Número de erupciones",
  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(num_V)

mediana_box <- median(num_V)

Q1_box <- quantile(num_V, 0.25)

Q3_box <- quantile(num_V, 0.75)

IQR_box <- IQR(num_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 <- num_V[
  num_V < lim_inf_outlier_box |
    num_V > lim_sup_outlier_box
]

n_outliers_box <- length(outliers_box)

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

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

boxplot(
  num_V,
  horizontal = TRUE,
  col = "lightblue",
  border = "darkblue",
  main = "Gráfica 7: Distribución del número de erupciones\ncon detección de valores atípicos",
  xlab = "Número de erupciones",
  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:", mediana_box),
    paste("Q1:", Q1_box),
    paste("Q3:", Q3_box),
    paste("Outliers:", n_outliers_box)
  ),
  bty = "n",
  cex = 0.85
)

8 INDICADORES ESTADISTICOS

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

X <- mean(num_V)

Me <- median(num_V)

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

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

var_numV <- var(num_V)

desv <- sd(num_V)

CV <- (desv / X) * 100

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

As <- skewness(num_V)

K <- kurtosis(num_V)

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

Variable <- "Número de erupciones"

min_numV <- min(num_V)

max_numV <- max(num_V)

Rango <- paste0(
  "[",
  min_numV,
  " - ",
  max_numV,
  "]"
)

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

atipicos_reales <- boxplot.stats(num_V)$out

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

8.1 Tabla resumen

Tabla Nro. 2

Indicadores estadísticos del número de erupciones de los volcanes a nivel mundial
Variable Rango X Me Mo sd CV As K Valores.atípicos
Número de erupciones [1 - 28] 8.59 5 1 7.66 89.15 1.03 -0.02 0
Elaborado por: Grupo 2 - Carrera de Geología.

9 CONCLUSIONES

La variable número de erupciones fluctúa entre 1 y 28, y sus valores giran en torno a una media de 8.59. No se evidencian valores atípicos, lo que indica que la distribución de los datos no presenta registros extremos en el número de erupciones de los volcanes analizados.”