1 Introducción

En este documento se presenta un análisis estadístico descriptivo completo de la variable cuantitativa continua asociada al area en km2 de los paises donde se ubican los volcanes, incluyendo preparación de datos, distribución de frecuencias, representaciones gráficas e indicadores estadísticos.


2 Preparación de los Datos

2.1 Lectura del Dataset

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

2.2 Selección de la Variable

area_km2 <- Volcanes_Globales$country_area_km2

2.3 Limpieza de Datos

area_km2_limpios <- Volcanes_Globales %>%
  filter(!is.na(country_area_km2)) %>%
  pull(country_area_km2)

sum(is.na(area_km2_limpios)) # Para comprobar que los datos NA se hayan limpiado
## [1] 0

3 Distribución de Frecuencias

3.1 Intervalos según Sturges

# Calcular n (numero de datos)
n <- length(area_km2_limpios)
length(area_km2_limpios)   #Existen 889 datos
## [1] 889
# Calcular intervalos con Sturges
k <- round(1 + 3.322 * log10(n))
k  #Se obtienen 11 intervalos
## [1] 11
# Crear intervalos
# Limites inferior y superior
minimo <- min(area_km2_limpios)
maximo <- max(area_km2_limpios)

# Amplitud
amplitud <- (maximo - minimo) / k

# Vector de cortes numericos
breaks <- seq(
  from = minimo,
  to = maximo,
  by = amplitud
)

# limites inferiores
Li <- breaks[-length(breaks)]

# limites superiores
Ls <- breaks[-1]

# asegurar ultimo limite
breaks[length(breaks)] <- maximo

# crear intervalos
intervalos <- cut(
  area_km2_limpios,
  breaks = breaks,
  include.lowest = TRUE
)

3.2 Frecuencias

3.2.1 Cálculo de ni y hi

# Frecuencia Absoluta ni
ni <- numeric(k)

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

#Frecuencia Relativa hi
hi <- ni / n

3.2.2 Cálculo de Ni y Hi

# Frecuencia absoluta acumulada Ni
Ni_asc <- cumsum(ni)

Ni_dsc <- rev(cumsum(rev(ni)))

# Frecuencia relativa acumulada Hi
Hi_asc <- cumsum(hi)

Hi_dsc <- rev(cumsum(rev(hi)))

3.3 Marcas de Clase

MC_num <- (Li + Ls) / 2

# Notación Científica
superscript <- function(x){
  
  x <- as.character(x)
  
  x <- gsub("-", "⁻", x)
  x <- gsub("0", "⁰", x)
  x <- gsub("1", "¹", x)
  x <- gsub("2", "²", x)
  x <- gsub("3", "³", x)
  x <- gsub("4", "⁴", x)
  x <- gsub("5", "⁵", x)
  x <- gsub("6", "⁶", x)
  x <- gsub("7", "⁷", x)
  x <- gsub("8", "⁸", x)
  x <- gsub("9", "⁹", x)
  
  x
}

formato_cientifico <- function(x){
  
  sapply(x, function(valor){
    
    sci <- format(
      valor,
      scientific = TRUE,
      digits = 3
    )
    
    partes <- strsplit(sci, "e")[[1]]
    
    mantisa <- partes[1]
    
    exponente <- as.integer(partes[2])
    
    paste0(
      mantisa,
      " × 10",
      superscript(exponente)
    )
  })
}

#Intevalos y Marcas de clase MC

Intervalo <- paste0(
  formato_cientifico(Li),
  " - ",
  formato_cientifico(Ls)
)

MC <- formato_cientifico(MC_num)

3.4 DataFrame

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

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

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

# Mostrar Tabla
TDFarea_km2

3.5 Tabla de Distribución de Frecuencias

TDFarea_km2 %>%
  
  select(
    Intervalo,
    MC,
    ni,
    hi,
    Ni_dsc,
    Hi_dsc,
    Ni_asc,
    Hi_asc
  ) %>%
  
  gt() %>%
  
  cols_label(
    Intervalo = html("Intervalo<br>de clase"),
    
    MC = html("Marca de<br>clase<br>(MC)"),
    
    ni = html("Frecuencia<br>absoluta<br>n<sub>i</sub>"),
    
    hi = html("Frecuencia<br>relativa<br>h<sub>i</sub>"),
    
    Ni_dsc = html("N<sub>i</sub> &darr;"),
    
    Hi_dsc = html("H<sub>i</sub> &darr;"),
    
    Ni_asc = html("N<sub>i</sub> &uarr;"),
    
    Hi_asc = html("H<sub>i</sub> &uarr;")
  ) %>%
  
  tab_header(
    title = md("**Tabla N° 4**"),
    subtitle = "Distribución de frecuencias del área de los países donde se ubican los volcanes"
  ) %>%
  
  tab_source_note(
    source_note = "Elaborado por: Grupo 2 - Carrera de Geología."
  ) %>%
  
  cols_align(
    align = "center",
    columns = everything()
  ) %>%
  
  tab_options(
    table.font.names = "Times New Roman",
    
    table.border.top.color = "transparent",
    
    column_labels.border.top.color = "black",
    column_labels.border.top.width = px(2),
    
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    
    table_body.hlines.color = "transparent",
    
    table_body.border.bottom.color = "black",
    table_body.border.bottom.width = px(2)
  )
Tabla N° 4
Distribución de frecuencias del área de los países donde se ubican los volcanes
Intervalo
de clase
Marca de
clase
(MC)
Frecuencia
absoluta
ni
Frecuencia
relativa
hi
Ni Hi Ni Hi
1.02 × 10² - 1.55 × 10⁶ 7.77 × 10⁵ 586 0.6592 889 1 586 0.6592
1.55 × 10⁶ - 3.11 × 10⁶ 2.33 × 10⁶ 228 0.2565 303 0.3408 814 0.9156
3.11 × 10⁶ - 4.66 × 10⁶ 3.89 × 10⁶ 0 0.0000 75 0.0844 814 0.9156
4.66 × 10⁶ - 6.22 × 10⁶ 5.44 × 10⁶ 0 0.0000 75 0.0844 814 0.9156
6.22 × 10⁶ - 7.77 × 10⁶ 6.99 × 10⁶ 0 0.0000 75 0.0844 814 0.9156
7.77 × 10⁶ - 9.33 × 10⁶ 8.55 × 10⁶ 0 0.0000 75 0.0844 814 0.9156
9.33 × 10⁶ - 1.09 × 10⁷ 1.01 × 10⁷ 52 0.0585 75 0.0844 866 0.9741
1.09 × 10⁷ - 1.24 × 10⁷ 1.17 × 10⁷ 0 0.0000 23 0.0259 866 0.9741
1.24 × 10⁷ - 1.4 × 10⁷ 1.32 × 10⁷ 0 0.0000 23 0.0259 866 0.9741
1.4 × 10⁷ - 1.55 × 10⁷ 1.48 × 10⁷ 1 0.0011 23 0.0259 867 0.9753
1.55 × 10⁷ - 1.71 × 10⁷ 1.63 × 10⁷ 22 0.0247 22 0.0247 889 1
TOTAL -- 889 1.0000 -- -- -- --
Elaborado por: Grupo 2 - Carrera de Geología.

3.6 Tabla de Distribución de Frecuencias OPTIMIZADA

# Se reduce manualmente a 6 intervalos para evitar clases vacías y mejorar la interpretación de la tabla

k <- 6
k
## [1] 6
# 3) Crear intervalos
# limites inferior y superior
minimo <- min(area_km2_limpios)
maximo <- max(area_km2_limpios)

# amplitud
amplitud <- (maximo - minimo) / k

# vector de cortes numericos
breaks <- seq(
  from = minimo,
  to = maximo,
  by = amplitud
)

# limites inferiores
Li <- breaks[-length(breaks)]

# limites superiores
Ls <- breaks[-1]

# asegurar ultimo limite
breaks[length(breaks)] <- maximo

# crear intervalos
intervalos <- cut(
  area_km2_limpios,
  breaks = breaks,
  include.lowest = TRUE
)

#TABLA DE FRECUENCIAS
#FRECUENCIA ABSOLUTA (ni)
ni <- numeric(k)

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

# FRECUENCIA ABSOLUTA ACUMULADA
Ni_asc <- cumsum(ni)

Ni_dsc <- rev(cumsum(rev(ni)))

# FRECUENCIA RELATIVA PORCENTUAL
hi <- ni / n

# FRECUENCIA RELATIVA DECIMAL
hi_pct <- hi * 100

# FRECUENCIA RELATIVA ACUMULADA
Hi_asc <- cumsum(hi)

Hi_dsc <- rev(cumsum(rev(hi)))

#CALCULAR MARCAS DE CLASE
# limites inferiores
Li <- breaks[-length(breaks)]

# limites superiores
Ls <- breaks[-1]

#--------------------------------------------------------
# CALCULAR MARCAS DE CLASE
#--------------------------------------------------------

MC_num <- (Li + Ls) / 2

#--------------------------------------------------------
# NOTACION CIENTIFICA CON SUPERINDICES
#--------------------------------------------------------

superscript <- function(x){
  
  x <- as.character(x)
  
  x <- gsub("-", "⁻", x)
  x <- gsub("0", "⁰", x)
  x <- gsub("1", "¹", x)
  x <- gsub("2", "²", x)
  x <- gsub("3", "³", x)
  x <- gsub("4", "⁴", x)
  x <- gsub("5", "⁵", x)
  x <- gsub("6", "⁶", x)
  x <- gsub("7", "⁷", x)
  x <- gsub("8", "⁸", x)
  x <- gsub("9", "⁹", x)
  
  x
}

formato_cientifico <- function(x){
  
  sapply(x, function(valor){
    
    sci <- format(
      valor,
      scientific = TRUE,
      digits = 3
    )
    
    partes <- strsplit(sci, "e")[[1]]
    
    mantisa <- partes[1]
    
    exponente <- as.integer(partes[2])
    
    paste0(
      mantisa,
      " × 10",
      superscript(exponente)
    )
  })
}

#--------------------------------------------------------
# INTERVALOS Y MARCAS DE CLASE
#--------------------------------------------------------

Intervalo <- paste0(
  formato_cientifico(Li),
  " - ",
  formato_cientifico(Ls)
)

MC <- formato_cientifico(MC_num)

#--------------------------------------------------------
# DATAFRAME FINAL
#--------------------------------------------------------

TDF <- data.frame(
  Intervalo = Intervalo,
  MC = MC,
  ni = ni,
  Ni_asc = Ni_asc,
  Ni_dsc = Ni_dsc,
  hi = round(hi, 4),
  hi_pct = round(hi_pct, 2),
  Hi_asc = round(Hi_asc, 4),
  Hi_dsc = round(Hi_dsc, 4)
)
#--------------------------------------------------------
# FILA DE TOTALES
#--------------------------------------------------------

fila_total <- data.frame(
  Intervalo = "TOTAL",
  MC = "--",
  ni = sum(ni),
  Ni_asc = "--",
  Ni_dsc = "--",
  hi = round(sum(hi), 4),
  hi_pct = round(sum(hi_pct), 2),
  Hi_asc = "--",
  Hi_dsc = "--"
)
#--------------------------------------------------------
# UNIR TABLA CON TOTAL
#--------------------------------------------------------

TDFarea_km2 <- rbind(TDF, fila_total)

# MOSTRAR TABLA
TDFarea_km2
#--------------------------------------------------------
# TABLA ESTILIZADA (FORMATO APA)
#--------------------------------------------------------

TDFarea_km2 %>%
  
  select(
    Intervalo,
    MC,
    ni,
    hi,
    hi_pct,
    Ni_dsc,
    Hi_dsc,
    Ni_asc,
    Hi_asc
  ) %>%
  
  gt() %>%
  
  cols_label(
    
    Intervalo = html("Intervalo<br>de clase"),
    
    MC = html("Marca de<br>clase<br>(MC)"),
    
    ni = html("Frecuencia<br>absoluta<br>n<sub>i</sub>"),
    
    hi = html("Frecuencia<br>relativa<br>h<sub>i</sub>"),
    
    hi_pct = html("Frecuencia<br>relativa<br>h<sub>i</sub> (%)"),
    
    Ni_dsc = html("N<sub>i</sub> &darr;"),
    
    Hi_dsc = html("H<sub>i</sub> &darr;"),
    
    Ni_asc = html("N<sub>i</sub> &uarr;"),
    
    Hi_asc = html("H<sub>i</sub> &uarr;")
  ) %>%
  
  tab_header(
    title = md("**Tabla N° 4**"),
    subtitle = "Distribución de frecuencias del área de los países donde se ubican los volcanes"
  ) %>%
  
  tab_source_note(
    source_note = "Elaborado por: Grupo 2 - Carrera de Geología."
  ) %>%
  
  cols_align(
    align = "center",
    columns = everything()
  ) %>%
  
  tab_options(
    
    table.font.names = "Times New Roman",
    
    table.border.top.color = "transparent",
    
    column_labels.border.top.color = "black",
    column_labels.border.top.width = px(2),
    
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    
    table_body.hlines.color = "transparent",
    
    table_body.border.bottom.color = "black",
    table_body.border.bottom.width = px(2)
  )
Tabla N° 4
Distribución de frecuencias del área de los países donde se ubican los volcanes
Intervalo
de clase
Marca de
clase
(MC)
Frecuencia
absoluta
ni
Frecuencia
relativa
hi
Frecuencia
relativa
hi (%)
Ni Hi Ni Hi
1.02 × 10² - 2.85 × 10⁶ 1.42 × 10⁶ 814 0.9156 91.56 889 1 814 0.9156
2.85 × 10⁶ - 5.7 × 10⁶ 4.27 × 10⁶ 0 0.0000 0.00 75 0.0844 814 0.9156
5.7 × 10⁶ - 8.55 × 10⁶ 7.12 × 10⁶ 0 0.0000 0.00 75 0.0844 814 0.9156
8.55 × 10⁶ - 1.14 × 10⁷ 9.97 × 10⁶ 52 0.0585 5.85 75 0.0844 866 0.9741
1.14 × 10⁷ - 1.42 × 10⁷ 1.28 × 10⁷ 1 0.0011 0.11 23 0.0259 867 0.9753
1.42 × 10⁷ - 1.71 × 10⁷ 1.57 × 10⁷ 22 0.0247 2.47 22 0.0247 889 1
TOTAL -- 889 1.0000 100.00 -- -- -- --
Elaborado por: Grupo 2 - Carrera de Geología.

4 Gráficas de Distribución de Frecuencias (GDFs)

4.1 Histograma de Frecuencia Absoluta Local

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

# graficar barras
pos_x <- barplot(
  ni,
  
  col = "red",
  
  border = "black",
  
  space = 0,
  
  las = 1,
  
  main = "Gráfica 1: Distribución de la frecuencia absoluta (ni) 
  del área de los países donde se ubican los volcanes (local)",
  
  xlab = "Área (km²)",
  
  ylab = "Cantidad (ni)",
  
  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(ni),
  
  labels = round(cortes_x, 2),
  
  cex.axis = 0.7
)

4.2 Histograma de Frecuencia Absoluta Global

# margen inferior amplio para etiquetas del eje X
par(mar = c(5, 4, 4, 2))

# gráfico
pos_x <- barplot(
  ni,
  
  col = "chocolate",
  
  border = "black",
  
  space = 0,
  
  las = 1,
  
  ylim = c(0, 1000),
  
  main = "Gráfica 2: Distribución de la frecuencia absoluta (ni) 
  del área de los países donde se ubican los volcanes (global)",
  
  xlab = "Área (km²)",
  
  ylab = "Cantidad (ni)",
  
  axes = TRUE
)

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

# agregar eje X manual con límites inferiores y superior final
axis(
  side = 1,
  at = 0:length(ni),
  labels = round(cortes_x, 2),
  cex.axis = 0.7
)

4.3 Histograma de Frecuencia Relativa Local

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

# graficar barras
pos_x <- barplot(
  hi_pct,
  
  col = "red",
  
  border = "black",
  
  space = 0,
  
  las = 1,
  
  main = "Gráfica 2: Distribución de la frecuencia (hi%) 
  del área de los países donde se ubican los volcanes (local)",
  
  xlab = "Área (km²)",
  
  ylab = "Porcentaje (%)",
  
  axes = TRUE
)

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

# eje X manual
axis(
  side = 1,
  
  at = 0:length(hi_pct),
  
  labels = round(cortes_x, 2),
  
  cex.axis = 0.7
)

4.4 Histograma de Frecuencia Relativa Global

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

# graficar barras
pos_x <- barplot(
  hi_pct,
  
  col = "chocolate",
  
  border = "black",
  
  space = 0,
  
  las = 1,
  
  ylim = c(0, 100),
  
  main = "Gráfica 3: Distribución de la frecuencia relativa (hi%)
  del área de los países donde se ubican los volcanes (global)",

  xlab = "Área (km²)",
  
  ylab = "Porcentaje (%)",
  
  axes = TRUE
)

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

# eje X manual
axis(
  side = 1,
  
  at = 0:length(hi_pct),
  
  labels = round(cortes_x, 2),
  
  cex.axis = 0.7
)

4.5 Ojiva de Frecuencias Absolutas

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

plot(
  1:length(Intervalo),
  Ni_asc,
  
  type = "o",
  
  pch = 16,
  
  col = "blue",
  
  xaxt = "n",
  
  ylim = c(0, max(c(Ni_asc, Ni_dsc))),
  
  xlab = "Intervalos de área (km²)",
  
  ylab = "Frecuencia Absoluta Acumulada (Ni)",
  
  main = "Gráfica 5: Ojiva de Frecuencias Absolutas Acumuladas"
)

lines(
  1:length(Intervalo),
  Ni_dsc,
  
  type = "o",
  
  pch = 16,
  
  col = "red"
)

axis(
  side = 1,
  
  at = 1:length(Intervalo),
  
  labels = Intervalo,
  
  las = 1,
  
  cex.axis = 0.7
)

legend(
  x = "right",
  
  y = max(c(Ni_asc, Ni_dsc)) * 0.55,
  
  legend = c("Ni Ascendente", "Ni Descendente"),
  
  col = c("blue", "red"),
  
  pch = 16,
  
  lty = 1,
  
  cex = 0.75,
  
  bty = "n"
)

4.6 Ojiva de Frecuencias Relativas

# Calculo de Frecuencias relativas porcentuales acumuladas

Hi_asc_pct <- Hi_asc * 100

Hi_dsc_pct <- Hi_dsc * 100

#Ojiva
par(mar = c(10, 4, 4, 2))

plot(
  1:length(Intervalo),
  Hi_asc_pct,
  
  type = "o",
  
  pch = 16,
  
  col = "blue",
  
  xaxt = "n",
  
  ylim = c(0, 100),
  
  xlab = "Intervalos de área (km²)",
  
  ylab = "Frecuencia Relativa Acumulada (%)",
  
  main = "Gráfica 6: Ojiva de Frecuencias Relativas Acumuladas"
)

lines(
  1:length(Intervalo),
  Hi_dsc_pct,
  
  type = "o",
  
  pch = 16,
  
  col = "red"
)

axis(
  side = 1,
  
  at = 1:length(Intervalo),
  
  labels = Intervalo,
  
  las = 1,
  
  cex.axis = 0.5
)

legend(
  "right",
  
  inset = c(0.02, 0),
  
  legend = c("Hi Ascendente", "Hi Descendente"),
  
  col = c("blue", "red"),
  
  pch = 16,
  
  lty = 1,
  
  cex = 0.75,
  
  bty = "n"
)

4.7 Diagrama de Caja y Bigotes

#CALCULO DE ESTADISTICOS
media_box <- mean(area_km2_limpios)

mediana_box <- median(area_km2_limpios)

Q1_box <- quantile(area_km2_limpios, 0.25)

Q3_box <- quantile(area_km2_limpios, 0.75)

IQR_box <- IQR(area_km2_limpios)


# 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_limpios[
  area_km2_limpios < lim_inf_outlier_box |
    area_km2_limpios > lim_sup_outlier_box
]

n_outliers_box <- length(outliers_box)


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

boxplot(
  area_km2_limpios,
  
  horizontal = TRUE,
  
  xaxt = "n",
  
  col = "lightblue",
  
  border = "darkblue",
  
  main = "Gráfica 7: Distribución del área de los países donde se ubican los volcanes\ncon detección de valores atípicos",
  
  xlab = "Área (km²)",
  
  ylab = ""
)


# EJE X EN NOTACIÓN CIENTÍFICA
ticks_box <- axTicks(1)

axis(
  side = 1,
  
  at = ticks_box,
  
  labels = formato_cientifico(ticks_box),
  
  cex.axis = 0.8
)


# MEDIA
points(
  media_box,
  1,
  
  pch = 23,
  
  bg = "red",
  
  cex = 1.2
)


# LEYENDA
legend(
  "topright",
  
  legend = c(
    paste("Media:", formato_cientifico(media_box)),
    paste("Mediana:", formato_cientifico(mediana_box)),
    paste("Q1:", formato_cientifico(Q1_box)),
    paste("Q3:", formato_cientifico(Q3_box)),
    paste("Outliers:", n_outliers_box)
  ),
  
  bty = "n",
  
  cex = 0.8
)


5 Indicadores Estadísticos

5.1 Tendencia Central

# FUNCIÓN DE NOTACIÓN CIENTÍFICA (MAYOR PRECISIÓN)
# SOLO PARA LA TABLA DE TENDENCIA CENTRAL

formato_cientifico_5 <- function(x){
  
  sapply(x, function(valor){
    
    sci <- format(
      valor,
      scientific = TRUE,
      digits = 6
    )
    
    partes <- strsplit(sci, "e")[[1]]
    
    mantisa <- partes[1]
    
    exponente <- as.integer(partes[2])
    
    paste0(
      mantisa,
      " × 10",
      superscript(exponente)
    )
  })
}


# INDICADORES DE TENDENCIA CENTRAL
minimo <- min(area_km2_limpios)

maximo <- max(area_km2_limpios)

rango <- maximo - minimo

media <- mean(area_km2_limpios)

mediana <- median(area_km2_limpios)

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

# TABLA DE INDICADORES
tendencia_central <- data.frame(
  
  Indicador = c(
    "Mínimo",
    "Media",
    "Mediana",
    "Moda",
    "Máximo",
    "Rango"
  ),
  
  Valor = c(
    formato_cientifico_5(minimo),
    formato_cientifico_5(media),
    formato_cientifico_5(mediana),
    formato_cientifico_5(moda),
    formato_cientifico_5(maximo),
    formato_cientifico_5(rango)
  ),
  
  Unidad = rep("km²", 6),
  
  Interpretacion = c(
    "Menor área observada",
    "Promedio de las áreas observadas",
    "Valor central de la distribución",
    "Área más frecuente observada",
    "Mayor área observada",
    "Diferencia entre el máximo y el mínimo"
  )
)


# TABLA GT (FORMATO APA)
tendencia_central %>%
  
  gt() %>%
  
  cols_label(
    
    Indicador = "Indicador",
    
    Valor = "Valor",
    
    Unidad = "Unidad",
    
    Interpretacion = "Interpretación"
  ) %>%
  
  tab_header(
    
    title = md("**Tabla N° 5**"),
    
    subtitle = "Indicadores de tendencia central del área de los países donde se ubican los volcanes"
  ) %>%
  
  tab_source_note(
    
    source_note = "Elaborado por: Grupo 2 - Carrera de Geología."
  ) %>%
  
  cols_align(
    
    align = "center",
    
    columns = everything()
  ) %>%
  
  tab_options(
    
    table.font.names = "Times New Roman",
    
    table.border.top.color = "transparent",
    
    column_labels.border.top.color = "black",
    column_labels.border.top.width = px(2),
    
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    
    table_body.hlines.color = "transparent",
    
    table_body.border.bottom.color = "black",
    
    table_body.border.bottom.width = px(2)
  )
Tabla N° 5
Indicadores de tendencia central del área de los países donde se ubican los volcanes
Indicador Valor Unidad Interpretación
Mínimo 1.02 × 10² km² Menor área observada
Media 1.69726 × 10⁶ km² Promedio de las áreas observadas
Mediana 3.7793 × 10⁵ km² Valor central de la distribución
Moda 1.90457 × 10⁶ km² Área más frecuente observada
Máximo 1.70982 × 10⁷ km² Mayor área observada
Rango 1.70981 × 10⁷ km² Diferencia entre el máximo y el mínimo
Elaborado por: Grupo 2 - Carrera de Geología.

5.2 Dispersión

varianza <- var(area_km2_limpios)

desv_est <- sd(area_km2_limpios)

CV <- (desv_est / media) * 100

# INTERPRETACIÓN DEL CV

if(CV < 15) {
  
  interpretacion_CV <- "BAJA (CV < 15%)"
  
} else if(CV < 30) {
  
  interpretacion_CV <- "MODERADA (15% ≤ CV < 30%)"
  
} else {
  
  interpretacion_CV <- "ALTA (CV ≥ 30%)"
}

# TABLA DE DISPERSIÓN
dispersion <- data.frame(
  
  Indicador = c(
    "Varianza",
    "Desviación estándar",
    "Coeficiente de variación"
  ),
  
  Valor = c(
    formato_cientifico_5(varianza),
    formato_cientifico_5(desv_est),
    paste0(round(CV, 2), "%")
  ),
  
  Unidad = c(
    "km²²",
    "km²",
    ""
  ),
  
  Interpretacion = c(
    "Medida de dispersión al cuadrado",
    "Dispersión promedio respecto a la media",
    paste("Dispersión relativa:", interpretacion_CV)
  )
)

# TABLA GT (FORMATO APA)
dispersion %>%
  
  gt() %>%
  
  cols_label(
    
    Indicador = "Indicador",
    
    Valor = "Valor",
    
    Unidad = "Unidad",
    
    Interpretacion = "Interpretación"
  ) %>%
  
  tab_header(
    
    title = md("**Tabla N° 6**"),
    
    subtitle = "Indicadores de dispersión del área de los países donde se ubican los volcanes"
  ) %>%
  
  tab_source_note(
    
    source_note = "Elaborado por: Grupo 2 - Carrera de Geología."
  ) %>%
  
  cols_align(
    
    align = "center",
    
    columns = everything()
  ) %>%
  
  tab_options(
    
    table.font.names = "Times New Roman",
    
    table.border.top.color = "transparent",
    
    column_labels.border.top.color = "black",
    column_labels.border.top.width = px(2),
    
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    
    table_body.hlines.color = "transparent",
    
    table_body.border.bottom.color = "black",
    
    table_body.border.bottom.width = px(2)
  )
Tabla N° 6
Indicadores de dispersión del área de los países donde se ubican los volcanes
Indicador Valor Unidad Interpretación
Varianza 1.09596 × 10¹³ km²² Medida de dispersión al cuadrado
Desviación estándar 3.31053 × 10⁶ km² Dispersión promedio respecto a la media
Coeficiente de variación 195.05% Dispersión relativa: ALTA (CV ≥ 30%)
Elaborado por: Grupo 2 - Carrera de Geología.

5.3 Posición

cuartiles <- quantile(area_km2_limpios)

Q1 <- cuartiles[2]

Q2 <- cuartiles[3]

Q3 <- cuartiles[4]

IQR_val <- IQR(area_km2_limpios)

# DETECCIÓN DE OUTLIERS

lim_inf_outlier <- Q1 - 1.5 * IQR_val

lim_sup_outlier <- Q3 + 1.5 * IQR_val

outliers <- area_km2_limpios[
  area_km2_limpios < lim_inf_outlier |
    area_km2_limpios > lim_sup_outlier
]

n_outliers <- length(outliers)

porc_outliers <- round((n_outliers / n) * 100, 2)

# TABLA DE POSICIÓN
posicion <- data.frame(
  
  Indicador = c(
    "Cuartil 1 (Q1)",
    "Cuartil 2 (Q2 - Mediana)",
    "Cuartil 3 (Q3)",
    "Rango Intercuartílico (IQR)",
    "Límite Inferior Outliers",
    "Límite Superior Outliers",
    "Número de Outliers"
  ),
  
  Valor = c(
    formato_cientifico_5(Q1),
    formato_cientifico_5(Q2),
    formato_cientifico_5(Q3),
    formato_cientifico_5(IQR_val),
    formato_cientifico_5(lim_inf_outlier),
    formato_cientifico_5(lim_sup_outlier),
    paste0(n_outliers, " (", porc_outliers, "%)")
  ),
  
  Unidad = c(
    rep("km²", 6),
    "observaciones"
  ),
  
  Interpretacion = c(
    "25% de los países poseen áreas inferiores a este valor",
    "50% de los países poseen áreas inferiores a este valor",
    "75% de los países poseen áreas inferiores a este valor",
    "Amplitud del 50% central de las áreas observadas",
    "Límite inferior para identificar valores atípicos",
    "Límite superior para identificar valores atípicos",
    "Cantidad y porcentaje de valores atípicos detectados"
  )
)

# TABLA GT SIMPLE
posicion %>%
  
  gt() %>%
  
  cols_align(
    align = "center",
    columns = everything()
  ) %>%
  
  cols_label(
    Indicador = "Indicador",
    Valor = "Valor",
    Unidad = "Unidad",
    Interpretacion = "Interpretación"
  ) %>%
  
  tab_header(
    title = "Indicadores de Posición y Detección de Valores Atípicos"
  )
Indicadores de Posición y Detección de Valores Atípicos
Indicador Valor Unidad Interpretación
Cuartil 1 (Q1) 2.76841 × 10⁵ km² 25% de los países poseen áreas inferiores a este valor
Cuartil 2 (Q2 - Mediana) 3.7793 × 10⁵ km² 50% de los países poseen áreas inferiores a este valor
Cuartil 3 (Q3) 1.90457 × 10⁶ km² 75% de los países poseen áreas inferiores a este valor
Rango Intercuartílico (IQR) 1.62773 × 10⁶ km² Amplitud del 50% central de las áreas observadas
Límite Inferior Outliers -2.16475 × 10⁶ km² Límite inferior para identificar valores atípicos
Límite Superior Outliers 4.34616 × 10⁶ km² Límite superior para identificar valores atípicos
Número de Outliers 75 (8.44%) observaciones Cantidad y porcentaje de valores atípicos detectados

5.4 Forma

# COEFICIENTE DE ASIMETRÍA DE FISHER
asimetria <- skewness(area_km2_limpios)

# Interpretación de la asimetría

if(abs(asimetria) < 0.5) {
  
  interpretacion_asimetria <- "Distribución aproximadamente simétrica"
  
} else if(asimetria > 0) {
  
  interpretacion_asimetria <- "Asimetría positiva (sesgo a la derecha)"
  
} else {
  
  interpretacion_asimetria <- "Asimetría negativa (sesgo a la izquierda)"
}


# COEFICIENTE DE CURTOSIS (EXCESO)
curtosis <- kurtosis(area_km2_limpios) - 3

# Interpretación de la curtosis

if(abs(curtosis) < 0.5) {
  
  interpretacion_curtosis <- "Distribución mesocúrtica (similar a la normal)"
  
} else if(curtosis > 0) {
  
  interpretacion_curtosis <- "Distribución leptocúrtica (más picuda)"
  
} else {
  
  interpretacion_curtosis <- "Distribución platicúrtica (más aplanada)"
}

# TABLA DE FORMA
forma <- data.frame(
  
  Indicador = c(
    "Coeficiente de Asimetría (Fisher)",
    "Interpretación de la Asimetría",
    "Coeficiente de Curtosis (Exceso)",
    "Interpretación de la Curtosis"
  ),
  
  Valor = c(
    round(asimetria, 4),
    interpretacion_asimetria,
    round(curtosis, 4),
    interpretacion_curtosis
  ),
  
  Formula = c(
    "g₁ = E[(X-μ)³]/σ³",
    "|g₁|<0.5: Simétrica; g₁>0: Positiva; g₁<0: Negativa",
    "g₂ = E[(X-μ)⁴]/σ⁴ - 3",
    "|g₂|<0.5: Mesocúrtica; g₂>0: Leptocúrtica; g₂<0: Platicúrtica"
  )
)

# TABLA GT SIMPLE
forma %>%
  
  gt() %>%
  
  cols_label(
    
    Indicador = "Indicador",
    
    Valor = "Valor",
    
    Formula = "Fórmula / Criterio"
  ) %>%
  
  cols_align(
    
    align = "center",
    
    columns = everything()
  ) %>%
  
  tab_header(
    
    title = "Indicadores de Forma de la Distribución"
  )
Indicadores de Forma de la Distribución
Indicador Valor Fórmula / Criterio
Coeficiente de Asimetría (Fisher) 3.2801 g₁ = E[(X-μ)³]/σ³
Interpretación de la Asimetría Asimetría positiva (sesgo a la derecha) |g₁|<0.5: Simétrica; g₁>0: Positiva; g₁<0: Negativa
Coeficiente de Curtosis (Exceso) 10.7005 g₂ = E[(X-μ)⁴]/σ⁴ - 3
Interpretación de la Curtosis Distribución leptocúrtica (más picuda) |g₂|<0.5: Mesocúrtica; g₂>0: Leptocúrtica; g₂<0: Platicúrtica

6 Resumen General de Indicadores

tabla_resumen <- data.frame(
  
  Categoria = c(
    rep("Tendencia Central", 6),
    rep("Dispersión", 3),
    rep("Posición", 4),
    rep("Forma", 4)
  ),
  
  Indicador = c(
    "Mínimo",
    "Media",
    "Mediana",
    "Moda",
    "Máximo",
    "Rango",
    
    "Varianza",
    "Desviación estándar",
    "Coeficiente de variación",
    
    "Cuartil 1 (Q1)",
    "Cuartil 2 (Q2)",
    "Cuartil 3 (Q3)",
    "Rango intercuartílico (IQR)",
    
    "Asimetría (g₁)",
    "Interpretación asimetría",
    "Curtosis (g₂)",
    "Interpretación curtosis"
  ),
  
  Valor = c(
    
    formato_cientifico_5(minimo),
    formato_cientifico_5(media),
    formato_cientifico_5(mediana),
    formato_cientifico_5(moda),
    formato_cientifico_5(maximo),
    formato_cientifico_5(rango),
    
    formato_cientifico_5(varianza),
    formato_cientifico_5(desv_est),
    paste0(round(CV, 2), "%"),
    
    formato_cientifico_5(Q1),
    formato_cientifico_5(Q2),
    formato_cientifico_5(Q3),
    formato_cientifico_5(IQR_val),
    
    round(asimetria, 4),
    interpretacion_asimetria,
    
    round(curtosis, 4),
    interpretacion_curtosis
  ),
  
  Unidad = c(
    
    rep("km²", 6),
    
    "km⁴",
    "km²",
    "",
    
    rep("km²", 4),
    
    "", "", "", ""
  )
)

# TABLA GT RESUMEN
tabla_resumen %>%
  
  gt() %>%
  
  cols_label(
    
    Categoria = "Categoría",
    
    Indicador = "Indicador",
    
    Valor = "Valor",
    
    Unidad = "Unidad"
  ) %>%
  
  cols_align(
    
    align = "center",
    
    columns = everything()
  ) %>%
  
  tab_header(
    
    title = md("**Resumen General de Indicadores Estadísticos**"),
    
    subtitle = "Variable: Área de los países donde se ubican los volcanes"
  ) %>%
  
  tab_options(
    
    table.font.names = "Times New Roman"
  )
Resumen General de Indicadores Estadísticos
Variable: Área de los países donde se ubican los volcanes
Categoría Indicador Valor Unidad
Tendencia Central Mínimo 1.02 × 10² km²
Tendencia Central Media 1.69726 × 10⁶ km²
Tendencia Central Mediana 3.7793 × 10⁵ km²
Tendencia Central Moda 1.90457 × 10⁶ km²
Tendencia Central Máximo 1.70982 × 10⁷ km²
Tendencia Central Rango 1.70981 × 10⁷ km²
Dispersión Varianza 1.09596 × 10¹³ km⁴
Dispersión Desviación estándar 3.31053 × 10⁶ km²
Dispersión Coeficiente de variación 195.05%
Posición Cuartil 1 (Q1) 2.76841 × 10⁵ km²
Posición Cuartil 2 (Q2) 3.7793 × 10⁵ km²
Posición Cuartil 3 (Q3) 1.90457 × 10⁶ km²
Posición Rango intercuartílico (IQR) 1.62773 × 10⁶ km²
Forma Asimetría (g₁) 3.2801
Forma Interpretación asimetría Asimetría positiva (sesgo a la derecha)
Forma Curtosis (g₂) 10.7005
Forma Interpretación curtosis Distribución leptocúrtica (más picuda)

7 Conclusiones

Escribe aquí tus conclusiones finales basadas en el análisis realizado.