1. CARGA DE LIBRERIAS Y DATOS

#Carga de Librerías
library(readxl)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(gt)

#  Cargar base de datos
datos_nuevoartes <- read_excel("datos_nuevoartes.xlsx")

2. DEFINICIÓN DE LA VARIABLE

longitude <- datos_nuevoartes$longitude
longitude <- longitude[!is.na(longitude)]

3. PARÁMETROS DE CLASIFICACIÓN

k_long <- 12
n_long <- length(longitude)

min_long <- min(longitude)
max_long <- max(longitude)

R_long <- max_long - min_long
A_real <- R_long / k_long

4. AJUSTE DE AMPLITUD DE CLASE

A_long <- ifelse(
  A_real <= 2, 2,
  ifelse(
    A_real <= 5, 5,
    ifelse(
      A_real <= 10, 10,
      ceiling(A_real / 10) * 10
    )
  )
)

5. DEFINICIÓN DE CLASES

Li0 <- floor(min_long / A_long) * A_long

Li_long <- seq(Li0, by = A_long, length.out = k_long)
Ls_long <- Li_long + A_long

MC_long <- round((Li_long + Ls_long) / 2, 2)

6. CÁLCULO DE FRECUENCIAS

ni_long <- numeric(k_long)

for (i in 1:k_long) {
  if (i < k_long) {
    ni_long[i] <- sum(longitude >= Li_long[i] & longitude < Ls_long[i])
  } else {
    ni_long[i] <- sum(longitude >= Li_long[i] & longitude <= max_long)
  }
}

# --- AJUSTE DE PRECISIÓN PARA EVITAR EL 100.02 ---
# Calculamos hi con 2 decimales para todas menos la última
hi_long <- round((ni_long / sum(ni_long)) * 100, 2)
# Forzamos que la suma sea exactamente 100 ajustando la última fila
hi_long[k_long] <- 100 - sum(hi_long[1:(k_long-1)])

Ni_asc_long <- cumsum(ni_long)
Ni_dsc_long <- rev(cumsum(rev(ni_long)))

# Recalculamos acumuladas sobre los valores ya ajustados
Hi_asc_long <- cumsum(hi_long)
Hi_dsc_long <- rev(cumsum(rev(hi_long)))

7. TABLA DE FRECUENCIAS

TDF_longitude <- data.frame(
  Li = as.character(Li_long), # Convertimos a carácter para permitir el "TOTAL"
  Ls = as.character(Ls_long),
  MC = MC_long,
  ni = ni_long,
  hi = hi_long,
  Ni_asc = Ni_asc_long,
  Ni_dsc = Ni_dsc_long,
  Hi_asc = Hi_asc_long,
  Hi_dsc = Hi_dsc_long
)

TDF_longitude <- rbind(
  TDF_longitude,
  data.frame(
    Li = "TOTAL", Ls = "", MC = NA, ni = sum(ni_long), hi = 100,
    Ni_asc = NA, Ni_dsc = NA, Hi_asc = NA, Hi_dsc = NA
  )
)

8. TABLA DE PRESENTACIÓN

tabla_longitude <- TDF_longitude %>%
  # Aseguramos que las columnas sean numéricas para el formato de gt
  mutate(across(c(ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc, MC), as.numeric)) %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 18**"),
    subtitle = md("Distribución de frecuencias de Longitud (°) de los eventos a nivel mundial")
  ) %>%
  # Formato de 2 decimales para relativas y marca de clase
  fmt_number(
    columns = c(hi, Hi_asc, Hi_dsc, MC),
    decimals = 2
  ) %>%
  # Formato de 0 decimales para absolutas
  fmt_number(
    columns = c(ni, Ni_asc, Ni_dsc),
    decimals = 0
  ) %>%
  cols_label(
    Li = "L. Inferior",
    Ls = "L. Superior",
    MC = "Marca Clase",
    ni = "ni",
    hi = "hi (%)",
    Ni_asc = "Ni (asc)",
    Ni_dsc = "Ni (desc)",
    Hi_asc = "Hi (asc %)",
    Hi_dsc = "Hi (desc %)"
  ) %>%
  sub_missing(columns = everything(), missing_text = "") %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = Li == "TOTAL")
  ) %>%
  tab_source_note(
    source_note = md("Elaborado por: Grupo 2 – Carrera de Geología")
  )

tabla_longitude
Tabla N° 18
Distribución de frecuencias de Longitud (°) de los eventos a nivel mundial
L. Inferior L. Superior Marca Clase ni hi (%) Ni (asc) Ni (desc) Hi (asc %) Hi (desc %)
-180 -150 −165.00 85 0.77 85 11,033 0.77 100.00
-150 -120 −135.00 1,893 17.16 1,978 10,948 17.93 99.23
-120 -90 −105.00 1,221 11.07 3,199 9,055 29.00 82.07
-90 -60 −75.00 1,526 13.83 4,725 7,834 42.83 71.00
-60 -30 −45.00 228 2.07 4,953 6,308 44.90 57.17
-30 0 −15.00 318 2.88 5,271 6,080 47.78 55.10
0 30 15.00 334 3.03 5,605 5,762 50.81 52.22
30 60 45.00 279 2.53 5,884 5,428 53.34 49.19
60 90 75.00 2,034 18.44 7,918 5,149 71.78 46.66
90 120 105.00 1,784 16.17 9,702 3,115 87.95 28.22
120 150 135.00 1,083 9.82 10,785 1,331 97.77 12.05
150 180 165.00 248 2.23 11,033 248 100.00 2.23
TOTAL
11,033 100.00



Elaborado por: Grupo 2 – Carrera de Geología

9. HISTOGRAMAS

9.1 Histograma Local de (ni)

# Margen inferior amplio para los valores del eje X
par(mar=c(5, 4, 4, 2))

# 1. Graficamos sin eje X (names.arg = NULL) para colocarlo manualmente
pos_x <- barplot(ni_long, 
                 col = "grey", 
                 border = "black", 
                 space = 0, 
                 las = 1, 
                 main = "Gráfica 31: Distribución local de la frecuencia absoluta\nde la Longitud (°) de los eventos a nivel mundial", 
                 xlab = "Longitud (°)",
                 ylab = "Frecuencia absoluta (ni)",
                 axes = TRUE)

# 2. Dibujamos el eje X en las intersecciones (puntos de corte)
# Los puntos de corte son Li_long y el último Ls_long
cortes_x <- c(Li_long, max(Ls_long))

# 'pos_x' devuelve el centro de las barras. Al ser space=0, 
# los límites están en 0, 1, 2, ..., k
axis(side = 1, at = 0:length(ni_long), labels = cortes_x, cex.axis = 0.7)

9.2 HISTOGRAMAS Global de (ni)

par(mar=c(5, 5, 4, 2)) # Margen izquierdo ligeramente mayor para el número 11033

# Definimos el tamaño muestral
n_total_long <- 11033

# 1. Ploteo Global (Eje Y hasta 11033)
pos_global <- barplot(ni_long, 
                      col = "grey", 
                      border = "black", 
                      space = 0, 
                      las = 1, 
                      ylim = c(0, n_total_long), 
                      yaxt = "n",         # Desactivamos el eje Y por defecto
                      main = "Gráfica 32: Distribución global de la frecuencia absoluta\nde la Longitud (°) de los eventos a nivel mundial", 
                      xlab = "Longitud (°)",
                      ylab = "Frecuencia absoluta (ni)")

# 2. Representación manual del eje Y con el tamaño muestral
# Creamos marcas que incluyan el valor 11033
ticks_y <- c(0, 2000, 4000, 6000, 8000, 10000, n_total_long)
axis(side = 2, at = ticks_y, labels = ticks_y, las = 1)

# 3. Eje X en las intersecciones de las barras
axis(side = 1, at = 0:length(ni_long), labels = c(Li_long, max(Ls_long)), cex.axis = 0.7)

# Línea punteada opcional para marcar el tope muestral
abline(h = n_total_long, col = "red", lty = 2)

9.3. Histograma local hi

# Configuración de márgenes
par(mar=c(5, 5, 4, 2))

# 1. Identificamos el valor máximo de hi para el tope del eje Y
max_hi_local <- max(hi_long)

# 2. Ploteo Local de hi (El tope es el máximo valor porcentual de la variable)
pos_hi_local <- barplot(hi_long, 
                        col = "#CDB79E",    # Color para análisis local
                        border = "black", 
                        space = 0, 
                        las = 1, 
                        ylim = c(0, max_hi_local), # El tope es el valor máximo real
                        yaxt = "n",                # Desactivamos eje Y automático
                        main = "Gráfica 33: Distribución local de la frecuencia relativa\nde la Longitud (°) de los eventos por intervalos", 
                        xlab = "Longitud (°)",
                        ylab = "Porcentaje (%)")

# 3. Representación manual del eje Y hasta el valor máximo
# Creamos marcas sugeridas y añadimos el valor máximo exacto
ticks_y_local <- seq(0, max_hi_local, length.out = 5)
axis(side = 2, at = ticks_y_local, labels = round(ticks_y_local, 2), las = 1)

# 4. Eje X en las intersecciones (Límites de clase)
axis(side = 1, 
     at = 0:length(hi_long), 
     labels = c(Li_long, max(Ls_long)), 
     cex.axis = 0.7)

9.4. Histograma global hi

# Configuración de márgenes
par(mar=c(5, 5, 4, 2))

# 1. Ploteo Global de hi (Eje Y forzado a 100)
pos_hi_global <- barplot(hi_long, 
                         col = "#CDB79E", 
                         border = "black", 
                         space = 0, 
                         las = 1, 
                         ylim = c(0, 100),    # Fijamos el tope en 100%
                         yaxt = "n",          # Desactivamos eje Y automático
                         main = "Gráfica 34: Distribución global de la frecuencia relativa\nde la Longitud (°) de los eventos a nivel mundial", 
                         xlab = "Longitud (°)",
                         ylab = "Porcentaje (%)")

# 2. Representación manual del eje Y (incluyendo el 100%)
ticks_hi <- seq(0, 100, by = 20)
axis(side = 2, at = ticks_hi, labels = paste0(ticks_hi, "%"), las = 1)

# 3. Eje X en las intersecciones (Límites de clase)
axis(side = 1, 
     at = 0:length(hi_long), 
     labels = c(Li_long, max(Ls_long)), 
     cex.axis = 0.7)

# 4. Línea de referencia en el 100%
abline(h = 100, col = "blue", lty = 2, lwd = 1.5)

10. DIAGRAMA DE OJIVAS

plot(
  Ls_long,
  Ni_asc_long,
  type = "o",
  pch = 19,
  col = "blue",
  ylim = c(0, max(Ni_asc_long)),
  main = "Gráfica 35: Ojivas combinadas de Longitud (°) de 
  los eventos a nivel mundial",
  xlab = "Límites de clase (°)",
  ylab = "Frecuencia acumulada"
)

lines(
  Li_long,
  Ni_dsc_long,
  type = "o",
  pch = 17,
  col = "red"
)
legend(
  "right",
  legend = c("Ojiva ascendente (Ni ≤)", "Ojiva descendente (Ni ≥)"),
  col = c("blue", "red"),
  pch = c(19, 17),
  lty = 1,
  cex = 0.8,
  bty = "b"
)

11. DIAGRAMA DE CAJAS

boxplot(
  longitude,
  horizontal = TRUE,
  col = "grey",
  border = "black",
  main = " Gráfica 36: Diagrama de caja de Longitud (°) de 
  los eventos a nivel mundial ",
  xlab = "Longitude (°)",
  outline = TRUE,        # asegura que se muestren los outliers
  pch = 19,              # símbolo de los outliers
  outcol = "red"         # color de los outliers
)

12. INDICADORES ESTADÍSTICOS

ri <- -180
rs <-  180
x  <- mean(longitude)
Me <- median(longitude)

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

sd_long <- sd(longitude)
CV <- (sd_long / x) * 100

As <- mean((longitude - x)^3) / sd_long^3
K  <- mean((longitude - x)^4) / sd_long^4 - 3

12.1. Tabla de indicadores

TablaIndicadores_longitude <- data.frame(
  Var = "Longitude",
  ri = ri,
  rs = rs,
  x  = round(x, 2),
  Me = round(Me, 2),
  Mo = round(Mo, 2),
  sd = round(sd_long, 2),
  CV = round(CV, 2),
  As = round(As, 2),
  K  = round(K, 2)
)

tabla_longitude_indicadores <- TablaIndicadores_longitude %>%
  gt() %>%
  tab_header(
    title = md("Tabla N° 19"),
    subtitle = md("Indicadores estadísticos de la variable Longitud (°) de los 
                  eventos a nivel mundial")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  )

tabla_longitude_indicadores
Tabla N° 19
Indicadores estadísticos de la variable Longitud (°) de los eventos a nivel mundial
Var ri rs x Me Mo sd CV As K
Longitude -180 180 2.52 19.69 -122.3 100.91 4003.6 -0.06 -1.67
Autor: Grupo Geología

13. DETECCIÓN DE OUTLIERS – VARIABLE LONGITUDE (IQR)

13.1. CUARTILES E IQR

Q1 <- quantile(longitude, 0.25)
Q3 <- quantile(longitude, 0.75)
IQR_long <- Q3 - Q1

13.2. LÍMITES DE OUTLIERS

minimo <- Q1 - 1.5 * IQR_long
maximo <- Q3 + 1.5 * IQR_long

13.3. IDENTIFICAR OUTLIERS

outliers <- longitude[longitude < minimo | longitude > maximo]

n_outliers <- length(outliers)

13.4. TABLA DE OUTLIERS

Tabla_outliers <- data.frame(
  Outliers = ifelse(n_outliers == 0, "No se detectan", n_outliers),
  minimo   = round(minimo, 2),
  máximo   = round(maximo, 2)
)

13.5. TABLA PRESENTACIÓN

tabla_outliers_gt <- Tabla_outliers %>%
  gt() %>%
  tab_header(
    title = md("Tabla N° 20"),
    subtitle = md("Detección de valores atípicos (Outliers) en la variable longitud (°) 
                  de eventos  a nivel mundial (método IQR)")
  ) %>%
  cols_label(
    Outliers = "Outliers",
    minimo = "Límite inferior",
    máximo = "Límite superior"
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    column_labels.border.bottom.color = "black",
    heading.border.bottom.color = "black"
  )

tabla_outliers_gt
Tabla N° 20
Detección de valores atípicos (Outliers) en la variable longitud (°) de eventos a nivel mundial (método IQR)
Outliers Límite inferior Límite superior
No se detectan -410.6 396.68
Autor: Grupo Geología

14. CONCLUSIÓN

La variable longitud (°) fluctúa desde -180° hasta 180°, sus valores están en torno a 2.52°, con una desviación estándar de 100.91 siendo un conjunto de valores muy heterogeneo, cuyos valores se presentan en la parte media baja y media alta de la variable con sesgos hacia la izquierda y derecha representando un modelo bimodal.