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

area_km2 <- Volcanes_Globales$country_area_km2

2.1 Limpieza de Datos

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

3 CALCULO DE FRECUENCIAS

3.1 Intervalos por Sturges

# Calcular n (numero de datos)
n <- length(area_km2)
length(area_km2)
## [1] 889
# 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.

# Número de intervalos
k <- 6

# Amplitud simplificada
A <- 3000000

# Límites de clase
Li <- seq(0, by = A, length.out = k)
Ls <- Li + A

# Marca de clase
mc <- (Li + Ls) / 2

3.2 Cálculo de ni y hi

ni <- sapply(1:k, function(i){
  if(i < k){
    sum(area_km2 >= Li[i] & area_km2 < Ls[i], na.rm = TRUE)
  } else {
    sum(area_km2 >= Li[i] & area_km2 <= Ls[i], na.rm = TRUE)
  }
})

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

# Corrección para que la suma sea exactamente 100%
hi[length(hi)] <- round(100 - sum(hi[-length(hi)]), 2)

# Frecuencia acumulada absoluta
Ni_asc <- cumsum(ni)

# Frecuencia acumulada relativa (%)
Hi_asc <- round(cumsum(hi), 2)

# Corrección final acumulada
Hi_asc[length(Hi_asc)] <- 100

# Frecuencia acumulada descendente absoluta
Ni_desc <- rev(cumsum(rev(ni)))

# Frecuencia acumulada descendente relativa (%)
Hi_desc <- round(rev(cumsum(rev(hi))), 2)

# Corrección final descendente
Hi_desc[1] <- 100


# Crear intervalos para mostrar
Intervalo <- paste(
  format(Li, big.mark = ".", scientific = FALSE),
  "-",
  format(Ls, big.mark = ".", scientific = FALSE)
)


# Tabla de frecuencias
tabla_frecuencias <- data.frame(
  Intervalo,
  Li,
  Ls,
  mc,
  ni,
  hi,
  Ni_asc,
  Hi_asc,
  Ni_desc,
  Hi_desc
)


# Añadir fila de totales
tabla_frecuencias <- rbind(
  tabla_frecuencias,
  data.frame(
    Intervalo = "Total",
    Li = NA,
    Ls = NA,
    mc = NA,
    ni = sum(ni),
    hi = sum(hi),
    Ni_asc = NA,
    Hi_asc = NA,
    Ni_desc = NA,
    Hi_desc = NA
  )
)


# Mostrar tabla
tabla_frecuencias

4 TABLA DE DISTRIBUCIÓN DE FRECUENCIAS (TDFs)

Tabla N° 1
Distribución de frecuencias del área de los países donde se ubican los volcanes activos (km²)
Intervalo de clase Marca de
clase
(MC)
Frecuencia
absoluta
ni
Frecuencia
relativa
hi (%)
Ni Hi Ni Hi
0 - 3.000.000 1500000 814 91.56 889 100.00 814 91.56
3.000.000 - 6.000.000 4500000 0 0.00 75 8.44 814 91.56
6.000.000 - 9.000.000 7500000 0 0.00 75 8.44 814 91.56
9.000.000 - 12.000.000 10500000 52 5.85 75 8.44 866 97.41
12.000.000 - 15.000.000 13500000 1 0.11 23 2.59 867 97.52
15.000.000 - 18.000.000 16500000 22 2.48 22 2.48 889 100.00
Total NA 889 100.00 NA NA NA NA
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 area de los paises de los volcanes activos (km2) (local)",
  xlab = "Area de los paises (km2)",
  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 area de los paises de los volcanes activos (km2) (global)",
  xlab = "Area de los paises (km2)",
  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 area de los paises de los volcanes activos (km2) (local)",
  xlab = "Area de los paises (km2)",
  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 \ndel area de los paises de los volcanes activos (km2) (global)",
  xlab = "Area de los paises (km2)",
  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_desc)

# 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_desc)

# 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(area_km2)

mediana_box <- median(area_km2)

Q1_box <- quantile(area_km2, 0.25)

Q3_box <- quantile(area_km2, 0.75)

IQR_box <- IQR(area_km2)

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

n_outliers_box <- length(outliers_box)

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

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

boxplot(
  area_km2,
  horizontal = TRUE,
  col = "lightblue",
  border = "darkblue",
  main = "Gráfica 7: Distribución del area de los paises \nde los volcanes activos con detección de valores atípicos",
  xlab = "Area del pais (km2)",
  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(area_km2)

Me <- median(area_km2)

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

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

var_area_km2 <- var(area_km2)

desv <- sd(area_km2)

CV <- (desv / X) * 100

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

As <- skewness(area_km2)

K <- kurtosis(area_km2)

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

Variable <- "Area de los paises (km2)"

min_area_km2 <- min(area_km2)

max_area_km2 <- max(area_km2)

Rango <- paste0(
  "[",
  min_area_km2,
  " - ",
  max_area_km2,
  "]"
)

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

atipicos_reales <- boxplot.stats(area_km2)$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 area de los paises de los volcanes activos a nivel mundial
Variable Rango X Me Mo sd CV As K Valores.atípicos
Area de los paises (km2) [102 - 17098246] 1697262 377930 1904569 3310528 195.05 3.27 10.67 75
Elaborado por: Grupo 2 - Carrera de Geología.

9 CONCLUSIONES

La variable área de los países con volcanes activos a nivel mundial fluctúa entre 102 y 17 098 246, y sus valores giran en torno a una media de 1 697 262, con una desviación estándar de 3 310 528, lo que evidencia un conjunto de datos muy heterogéneo debido a la amplia variabilidad en la extensión territorial de los países analizados. Los valores se concentran principalmente en áreas territoriales bajas y medias, presentando una marcada asimetría positiva causada por la presencia de países con superficies extremadamente grandes que desplazan la distribución hacia valores superiores. Además, se identifican 75 valores atípicos dentro del intervalo de 102 a 17 098 246 km², asociados a países con extensiones territoriales excepcionalmente elevadas respecto al comportamiento general de la muestra.