1. CARGA DE LIBRERÍAS Y DATOS

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)
library(e1071)

datos_nuevoartes <- read_excel("datos_nuevoartes.xlsx")
# Extracción de la variable año desde la fecha
anio <- as.numeric(format(datos_nuevoartes$event_date, "%Y"))
anio <- anio[!is.na(anio)]
N_total <- length(anio)

2. MÉTODO DE STURGES

# Calculamos Sturges y restamos 1 para eliminar la última fila
k_base <- round(1 + 3.322 * log10(N_total))
k <- ifelse(k_base >= 12, 11, k_base) - 1 

val_min <- min(anio)
val_max <- max(anio)
R <- val_max - val_min
A <- ceiling(R / k)

# Generación de límites CONTINUOS
# Li empieza en val_min, Ls es Li + Amplitud
Li <- seq(val_min, by = A, length.out = k)
Ls <- Li + A  # Aquí se asegura que Ls[i] sea igual a Li[i+1]

# Ajuste del último límite para cerrar la tabla en el máximo real
Ls[k] <- val_max 

clases_etiquetas <- paste(Li, Ls, sep = "–")

3. CÁLCULO DE FRECUENCIAS

ni <- numeric(length(Li))
for (i in seq_along(Li)) {
  # En intervalos continuos: [Li, Ls). El último es [Li, Ls]
  if (i < k) {
    ni[i] <- sum(anio >= Li[i] & anio < Ls[i])
  } else {
    ni[i] <- sum(anio >= Li[i] & anio <= Ls[i])
  }
}

MC     <- (Li + Ls) / 2
hi     <- (ni / N_total) * 100
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- cumsum(hi)
Hi_dsc <- rev(cumsum(rev(hi)))

4. TABLA DE FRECUENCIAS

# Creación de la tabla base (asegúrate de que Li, Ls y MC estén definidos)
TDF_final <- data.frame(
  Clase  = clases_etiquetas,
  Li     = Li,
  Ls     = Ls,
  MC     = MC,
  ni     = ni,
  hi     = hi,
  Ni_asc = Ni_asc,
  Ni_dsc = Ni_dsc,
  Hi_asc = Hi_asc,
  Hi_dsc = Hi_dsc
)

5. TABLA DE PRESENTACIÓN

tabla_presentacion <- TDF_final %>%
  rbind(data.frame(Clase="TOTAL", Li=NA, Ls=NA, MC=NA, ni=sum(ni), hi=100, 
                   Ni_asc=NA, Ni_dsc=NA, Hi_asc=NA, Hi_dsc=NA)) %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 15**"),
    subtitle = md("Distribución de frecuencias del año de ocurrecia de deslizamientos  
                  a nivel mundial")
  ) %>%
  # --- AJUSTE: Li, Ls y MC COMO ENTEROS Y SIN SEPARADOR DE MILES ---
  fmt_number(
    columns = c(Li, Ls, MC), 
    decimals = 0, 
    use_seps = FALSE
  ) %>% 
  # --- PORCENTAJES CON 2 DECIMALES ---
  fmt_number(
    columns = c(hi, Hi_asc, Hi_dsc), 
    decimals = 2
  ) %>% 
  # -----------------------------------------------------------------
  sub_missing(columns = everything(), missing_text = "") %>%
  cols_label(
    Clase  = "Periodo",
    Li     = "L. Inferior",
    Ls     = "L. Superior",
    MC     = "Marca Clase",
    ni     = "ni (Eventos)",
    hi     = "hi (%)",
    Ni_asc = "Ni (asc)",
    Ni_dsc = "Ni (desc)",
    Hi_asc = "Hi (asc %)",
    Hi_dsc = "Hi (desc %)"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"), 
    locations = cells_body(rows = Clase == "TOTAL")
  ) %>%
  tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))

# Visualizar la tabla
tabla_presentacion
Tabla N° 15
Distribución de frecuencias del año de ocurrecia de deslizamientos
a nivel mundial
Periodo L. Inferior L. Superior Marca Clase ni (Eventos) hi (%) Ni (asc) Ni (desc) Hi (asc %) Hi (desc %)
1988–1991 1988 1991 1990 1 0.01 1 11033 0.01 100.00
1991–1994 1991 1994 1992 1 0.01 2 11032 0.02 99.99
1994–1997 1994 1997 1996 3 0.03 5 11031 0.05 99.98
1997–2000 1997 2000 1998 22 0.20 27 11028 0.24 99.95
2000–2003 2000 2003 2002 0 0.00 27 11006 0.24 99.76
2003–2006 2003 2006 2004 5 0.05 32 11006 0.29 99.76
2006–2009 2006 2009 2008 1120 10.15 1152 11001 10.44 99.71
2009–2012 2009 2012 2010 3211 29.10 4363 9881 39.55 89.56
2012–2015 2012 2015 2014 2933 26.58 7296 6670 66.13 60.45
2015–2017 2015 2017 2016 3737 33.87 11033 3737 100.00 33.87
TOTAL


11033 100.00



Elaborado por: Grupo 2 – Carrera de Geología

6. HISTOGRAMAS

6.1 Histograma Local de (ni)

# Margen estándar
par(mar=c(5, 4, 4, 2))

# 1. Identificamos el máximo real para el eje Y
max_ni_anio <- max(ni)

# 2. Graficamos Local ni
pos_x_anio <- barplot(ni, 
                  col = "#EEDFCC", 
                  border = "black", 
                  space = 0, 
                  las = 1, 
                  ylim = c(0, max_ni_anio),
                  yaxt = "n",
                  main = "Gráfica 25: Distribución local de la frecuencia absoluta\ndel año de ocurrencia de deslizamientos", 
                  xlab = "Año de Ocurrencia",
                  ylab = "Frecuencia absoluta (ni)")

# 3. Eje Y manual (sin decimales)
ticks_y_local <- round(seq(0, max_ni_anio, length.out = 5), 0)
axis(side = 2, at = ticks_y_local, labels = ticks_y_local, las = 1)

# 4. Eje X en las intersecciones (Límites de clase)
axis(side = 1, at = 0:length(ni), labels = c(Li, max(Ls)), cex.axis = 0.8)

6.2 Histograma Global de (ni)

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

n_total_anio <- 11033

# 1. Ploteo Global (Eje Y hasta 11033)
barplot(ni, 
        col = "#EEDFCC", 
        border = "black", 
        space = 0, 
        las = 1, 
        ylim = c(0, n_total_anio), 
        yaxt = "n",         
        main = "Gráfica 26: Distribución global de la frecuencia absoluta\ndel año de ocurrencia a nivel mundial", 
        xlab = "Año de Ocurrencia",
        ylab = "Frecuencia absoluta (ni)")

# 2. Eje Y manual con el tope 11033
ticks_y_global <- c(0, 2000, 4000, 6000, 8000, 10000, n_total_anio)
axis(side = 2, at = ticks_y_global, labels = ticks_y_global, las = 1)

# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(ni), labels = c(Li, max(Ls)), cex.axis = 0.8)

# Línea de tope muestral
abline(h = n_total_anio, col = "red", lty = 2)

6.3 Histograma Local de (hi)

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

max_hi_anio <- max(hi)

# 1. Ploteo Local de hi
barplot(hi, 
        col = "#CDB79E", 
        border = "black", 
        space = 0, 
        las = 1, 
        ylim = c(0, max_hi_anio), 
        yaxt = "n", 
        main = "Gráfica 27: Distribución local de la frecuencia relativa\ndel año de ocurrencia", 
        xlab = "Año de Ocurrencia",
        ylab = "Porcentaje (%)")

# 2. Eje Y manual redondeado a 2 decimales para limpieza visual
ticks_y_hi_local <- seq(0, max_hi_anio, length.out = 5)
axis(side = 2, at = ticks_y_hi_local, labels = round(ticks_y_hi_local, 2), las = 1)

# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(hi), labels = c(Li, max(Ls)), cex.axis = 0.8)

6.4 Histograma Global de (hi)

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

# 1. Ploteo Global de hi (Tope 100%)
barplot(hi, 
        col = "#CDB79E", 
        border = "black", 
        space = 0, 
        las = 1, 
        ylim = c(0, 100), 
        yaxt = "n", 
        main = "Gráfica 28: Distribución global de la frecuencia relativa\ndel año de ocurrencia a nivel mundial", 
        xlab = "Año de Ocurrencia",
        ylab = "Porcentaje (%)")

# 2. Eje Y manual (0% a 100%)
ticks_hi_global <- seq(0, 100, by = 20)
axis(side = 2, at = ticks_hi_global, labels = paste0(ticks_hi_global, "%"), las = 1)

# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(hi), labels = c(Li, max(Ls)), cex.axis = 0.8)

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

7. DIAGRAMA DE CAJA (BOXPLOT)

par(mfrow = c(1, 1), mar = c(5, 4, 4, 2))
boxplot(anio, col = "lightblue", main = "Gráfica 29: Diagrama de Caja de la 
        variable año de ocurrencia de deslizamientos a nivel mundial ",
        horizontal = TRUE, xlab = "Línea de Tiempo (Años)")

8. DIAGRAMA DE OJIVAS COMBINADAS

par(mar = c(7, 5, 4, 11)) 

plot(1:length(ni), Ni_asc, type = "b", pch = 17, col = "black",
     xaxt = "n", xlab = "", ylab = "Eventos Acumulados",
     main = "Gráfica 30: Ojivas combinadas de la variable año de 
     ocuurencia de deslizamientos a nivel mundial",
     ylim = c(0, max(Ni_asc, na.rm = TRUE)))

lines(1:length(ni), Ni_dsc, type = "b", pch = 16, col = "red")

axis(1, at = 1:length(ni), labels = clases_etiquetas, las = 2)
mtext("Periodos", side = 1, line = 5)

legend(
  "topright", 
  inset = c(-0.45, 0), 
  xpd = TRUE, 
  legend = c("Ascendente (Ni ≤)", "Descendente (Ni ≥)"),
  col = c("black", "red"), 
  pch = c(17, 16), 
  lty = 1, 
  bty = "n", 
  title = "Tipo de Ojiva",
  cex = 0.85 
)

9. INDICADORES ESTADÍSTICOS

# 1. Cálculos de los indicadores
x_bar <- mean(anio)
Me    <- median(anio)
Mo    <- as.numeric(names(sort(table(anio), decreasing = TRUE)[1]))
SD    <- sd(anio)
CV    <- (SD / x_bar) * 100
As    <- skewness(anio)
K     <- kurtosis(anio)

# 2. Creación del dataframe
tabla_indicadores <- data.frame(
  Variable = "Año de Ocurrencia",
  Min = min(anio), 
  Max = max(anio), 
  Media = x_bar,
  Mediana = Me, 
  Moda = Mo, 
  SD = SD,
  CV = CV, 
  Asimetria = As, 
  Curtosis = K
)

# 3. Construcción de la tabla con formatos específicos
tabla_indicadores_gt <- tabla_indicadores %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 16**"),
    subtitle = md("Indicadores Estadísticos de la variable año de ocurrencia a nivel mundial")
  ) %>%
  # --- FORMATEO PARA AÑOS: ENTEROS Y SIN COMAS ---
  fmt_number(
    columns = c(Min, Max, Media, Mediana, Moda), 
    decimals = 0, 
    use_seps = FALSE
  ) %>%
  # --- FORMATEO PARA ESTADÍSTICOS: 2 DECIMALES ---
  fmt_number(
    columns = c(SD, CV, Asimetria, Curtosis), 
    decimals = 2
  ) %>%
  # --- ETIQUETAS DE COLUMNAS ---
  cols_label(
    Min = "Mínimo",
    Max = "Máximo",
    SD = "Desv. Est.",
    CV = "CV (%)",
    Asimetria = "Asimetría"
  ) %>%
  tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))

# Visualizar la tabla
tabla_indicadores_gt
Tabla N° 16
Indicadores Estadísticos de la variable año de ocurrencia a nivel mundial
Variable Mínimo Máximo Media Mediana Moda Desv. Est. CV (%) Asimetría Curtosis
Año de Ocurrencia 1988 2017 2013 2013 2010 3.03 0.15 −0.49 0.76
Elaborado por: Grupo 2 – Carrera de Geología

10. DETECCIÓN DE OURLIERS

# 1. Cálculos de los umbrales de detección (Método de Tukey)
Q1 <- quantile(anio, 0.25)
Q3 <- quantile(anio, 0.75)
IQR_a <- Q3 - Q1
lim_inf <- Q1 - 1.5 * IQR_a
lim_sup <- Q3 + 1.5 * IQR_a

# 2. Identificación de valores atípicos
outliers_vec <- anio[anio < lim_inf | anio > lim_sup]

# 3. Creación del dataframe para la tabla
tabla_outliers <- data.frame(
  Variable = "Año de Ocurrencia",
  Outliers_Detectados = length(outliers_vec),
  Limite_Inferior = lim_inf,
  Limite_Superior = lim_sup,
  Q1 = Q1, 
  Q3 = Q3
)

# 4. Construcción de la tabla con gt()
tabla_outliers_gt <- tabla_outliers %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 17**"),
    subtitle = md("Detección de valores atípicos (Outliers) en la variable Año de ocurrencia 
                  de deslizamientos a nivel mundial")
  ) %>%
  # --- FORMATEO: ENTEROS Y SIN COMAS PARA AÑOS Y CONTEO ---
  fmt_number(
    columns = c(Outliers_Detectados, Limite_Inferior, Limite_Superior, Q1, Q3), 
    decimals = 0, 
    use_seps = FALSE
  ) %>%
  # --- ETIQUETAS DE COLUMNAS ---
  cols_label(
    Outliers_Detectados = "N° de Outliers",
    Limite_Inferior = "Límite Inf.",
    Limite_Superior = "Límite Sup.",
    Q1 = "Cuartil 1 (Q1)",
    Q3 = "Cuartil 3 (Q3)"
  ) %>%
  tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))

# Visualizar la tabla
tabla_outliers_gt
Tabla N° 17
Detección de valores atípicos (Outliers) en la variable Año de ocurrencia de deslizamientos a nivel mundial
Variable N° de Outliers Límite Inf. Límite Sup. Cuartil 1 (Q1) Cuartil 3 (Q3)
Año de Ocurrencia 27 2002 2022 2010 2015
Elaborado por: Grupo 2 – Carrera de Geología

11. CONCLUSIÓN

La variable Año de Ocurrencia fluctúa desde 1988 hasta 2017, sus valores están en torno al 2013, con una desviación estándar de 3.03 siendo un conjunto de valores homogeneo, cuyos valores se presentan en la parte media alta de la variable con un sesgo hacia la izquierda, a excepcion de 27 valores atípicos que van desde 1988 hasta 2002.