Descripción del Análisis Estadístico En este documento se presenta el análisis estadístico y probabilístico de la ocurrencia de deslizamientos registrados durante el periodo 2007–2017, utilizando como variable principal el Año de ocurrencia y su distribución estacional por intervalos de meses.

1. CARGA DE DATOS Y LIBRERÍAS

# Librerías
library(knitr)
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(tidyr)

# Carga de datos
datos_nuevoartes_separado_año <- read_excel("datos_nuevoartes_separado_año_mes.xlsx")

# FILTRAR PERIODO 2007–2017
datos_2007_2017 <- subset(datos_nuevoartes_separado_año,
                          Año >= 2007 & Año <= 2017)

2. TABLA DE DISTRIBUCIÓN DE FRECUENCIAS

# TABLA DE FRECUENCIAS POR AÑO

ni <- table(datos_2007_2017$Año)

TDF_final <- data.frame(
  Año = as.numeric(names(ni)),
  ni = as.numeric(ni)
)

TDF_final <- TDF_final %>%
  arrange(Año) %>%
  mutate(
    hi = (ni / sum(ni)) * 100,
    Ni_asc = cumsum(ni),
    Ni_dsc = rev(cumsum(rev(ni))),
    Hi_asc = cumsum(hi),
    Hi_dsc = rev(cumsum(rev(hi)))
  )

# TABLA PRESENTACION

tabla_presentacion <- TDF_final %>%
  rbind(data.frame(
    Año = "TOTAL",
    ni = sum(TDF_final$ni),
    hi = 100,
    Ni_asc = NA,
    Ni_dsc = NA,
    Hi_asc = NA,
    Hi_dsc = NA
  )) %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 1**"),
    subtitle = md("Distribución de frecuencias del año de ocurrencia  
                  (Periodo 2007–2017)")
  ) %>%
  fmt_number(columns = c(hi, Hi_asc, Hi_dsc), decimals = 2) %>%
  sub_missing(columns = everything(), missing_text = "") %>%
  cols_label(
    Año    = "Año",
    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 = Año == "TOTAL")
  ) %>%
  tab_source_note(
    source_note = md("Elaborado por: Grupo - Carrera de Geología")
  )

tabla_presentacion
Tabla N° 1
Distribución de frecuencias del año de ocurrencia
(Periodo 2007–2017)
Año ni (Eventos) hi (%) Ni (asc) Ni (desc) Hi (asc %) Hi (desc %)
2007 408 3.71 408 10988 3.71 100.00
2008 699 6.36 1107 10580 10.07 96.29
2009 379 3.45 1486 9881 13.52 89.93
2010 1528 13.91 3014 9502 27.43 86.48
2011 1304 11.87 4318 7974 39.30 72.57
2012 782 7.12 5100 6670 46.41 60.70
2013 1117 10.17 6217 5888 56.58 53.59
2014 1034 9.41 7251 4771 65.99 43.42
2015 1339 12.19 8590 3737 78.18 34.01
2016 1171 10.66 9761 2398 88.83 21.82
2017 1227 11.17 10988 1227 100.00 11.17
TOTAL 10988 100.00



Elaborado por: Grupo - Carrera de Geología

3. GRAFICAS FRECUENCIAS

# Frecuencia absoluta
barplot(TDF_final$ni,
        space = 0.5,
        main = "Gráfica Nº 1: Frecuencia absoluta (2007–2017)",
        xlab = "Año",
        ylab = "Eventos (ni)",
        names.arg = TDF_final$Año,
        las = 2,
        col = "darkred")

# Frecuencia relativa
barplot(TDF_final$hi,
        space = 0.5,
        main = "Gráfica Nº 2: Frecuencia relativa (%)",
        xlab = "Año",
        ylab = "hi (%)",
        names.arg = TDF_final$Año,
        las = 2,
        col = "darkblue")

# Frecuencia acumulada ascendente
barplot(TDF_final$Ni_asc,
        space = 0.5,
        main = "Gráfica Nº 3: Frecuencia acumulada ascendente",
        xlab = "Año",
        ylab = "Ni acumulado",
        names.arg = TDF_final$Año,
        las = 2,
        col = "darkgreen")

Análisis de Distribución de Frecuencias (Gráficas 1, 2 y 3) El análisis visual de la ocurrencia de deslizamientos entre 2007 y 2017 se presenta a través de tres perspectivas complementarias: Frecuencia Absoluta (Gráfica N° 1): Permite identificar el volumen real de eventos por año. Es fundamental para detectar “picos” de actividad geológica, donde años con barras más altas (color rojo oscuro) señalan periodos de mayor inestabilidad o impacto de factores detonantes (como eventos climáticos extremos). Frecuencia Relativa (Gráfica N° 2): Normaliza los datos en porcentajes (\(h_i\)), facilitando la comparación del peso específico de cada año respecto al total del periodo estudiado. Esto ayuda a visualizar qué proporción de la peligrosidad total de la década se concentró en años específicos. Frecuencia Acumulada Ascendente (Gráfica N° 3): Representa el crecimiento histórico de los eventos. La pendiente de esta gráfica es clave: un crecimiento abrupto entre barras consecutivas indica un periodo de aceleración en la ocurrencia de deslizamientos, mientras que una pendiente suave sugiere una estabilidad relativa en el fenómeno.Nota Técnica: El uso de colores diferenciados y la orientación vertical de las etiquetas en el eje X facilitan la lectura rápida de la cronología, permitiendo establecer una línea base para el comportamiento del riesgo geológico en el área de estudio.

4. AGRUPACIONES : Ene–Abr | May–Ago | Sep–Dic

Análisis de Agrupación Estacional (Cuatrimestral) La segmentación de los datos en periodos de cuatro meses permite realizar un análisis de estacionalidad más robusto. Esta agrupación es estratégica para:

Correlación Fenomenológica: Relacionar la frecuencia de deslizamientos con ciclos climáticos específicos (como temporadas de lluvia o sequía).

Reducción de Ruido: Suavizar la variabilidad mensual para resaltar tendencias estacionales claras que facilitan la predicción de riesgos.

Optimización del Modelado: Establecer la base de datos necesaria para la aplicación de modelos probabilísticos (como la Binomial Negativa) en los periodos de mayor vulnerabilidad, específicamente en el intervalo Enero–Abril.

4.1 TABLA POR INTERVALOS DE MESES Ene–Abr | May–Ago | Sep–Dic

# 🔵 TABLA POR INTERVALOS DE MESES
# Ene–Abr | May–Ago | Sep–Dic
datos_intervalos <- datos_2007_2017 %>%
  mutate(Periodo = case_when(
    Mes %in% c(1,2,3,4) ~ "Ene-Abr",
    Mes %in% c(5,6,7,8) ~ "May-Ago",
    Mes %in% c(9,10,11,12) ~ "Sep-Dic"
  )) %>%
  group_by(Año, Periodo) %>%
  summarise(ni = n(), .groups = "drop")

tabla_intervalos <- datos_intervalos %>%
  pivot_wider(names_from = Periodo,
              values_from = ni,
              values_fill = 0)

tabla_intervalos_gt <- tabla_intervalos %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 2**"),
    subtitle = md("Distribución de deslizamientos por intervalos de meses  
                  (Periodo 2007–2017)")
  ) %>%
  cols_label(
    Año = "Año",
    `Ene-Abr` = "Enero–Abril",
    `May-Ago` = "Mayo–Agosto",
    `Sep-Dic` = "Septiembre–Diciembre"
  ) %>%
  tab_source_note(
    source_note = md("Elaborado por: Grupo – Carrera de Geología")
  )

tabla_intervalos_gt
Tabla N° 2
Distribución de deslizamientos por intervalos de meses
(Periodo 2007–2017)
Año Enero–Abril Mayo–Agosto Septiembre–Diciembre
2007 68 156 184
2008 113 286 300
2009 39 101 239
2010 420 565 543
2011 599 519 186
2012 338 198 246
2013 163 607 347
2014 355 315 364
2015 345 521 473
2016 315 484 372
2017 795 425 7
Elaborado por: Grupo – Carrera de Geología

Análisis por Intervalos Estacionales (Tabla N° 2) Esta sección reorganiza la información en cuatrimestres para identificar patrones estacionales en la ocurrencia de deslizamientos. Al agrupar los meses (Ene-Abr, May-Ago, Sep-Dic), se logra:

Identificar periodos críticos: Determinar en qué etapa del año se concentra la mayor saturación de suelos o intensidad de lluvias.

Comparación Estructural: La transformación de los datos (pivot) permite contrastar directamente el comportamiento de los tres periodos a lo largo de la serie temporal (2007–2017).

Evaluación de Riesgos: Facilita la detección de anomalías climáticas anuales, diferenciando años con actividad constante de aquellos con eventos concentrados en una sola estación.

4.2 GRAFICAS POR INTERVALOS

par(mfrow = c(3,1))

# Ene–Abr
barplot(tabla_intervalos$`Ene-Abr`,
        space = 0.5,
        main = "Gráfica Nº 4: Deslizamientos Enero–Abril (2007–2017)",
        xlab = "Año",
        ylab = "Eventos (ni)",
        names.arg = tabla_intervalos$Año,
        las = 2,
        col = "darkred")

# May–Ago
barplot(tabla_intervalos$`May-Ago`,
        space = 0.5,
        main = "Gráfica Nº 5: Deslizamientos Mayo–Agosto (2007–2017)",
        xlab = "Año",
        ylab = "Eventos (ni)",
        names.arg = tabla_intervalos$Año,
        las = 2,
        col = "darkblue")

# Sep–Dic
barplot(tabla_intervalos$`Sep-Dic`,
        space = 0.5,
        main = "Gráfica Nº 6: Deslizamientos Septiembre–Diciembre (2007–2017)",
        xlab = "Año",
        ylab = "Eventos (ni)",
        names.arg = tabla_intervalos$Año,
        las = 2,
        col = "darkgreen")

par(mfrow = c(1,1))

5 AGRUPACIÓN : ENERO–ABRIL

# Filtrar Ene–Abr y excluir 2017
datos_ene_abr <- datos_2007_2017 %>%
  filter(Mes %in% c(1,2,3,4),
         Año != 2017)

# Crear grupos personalizados
datos_ene_abr <- datos_ene_abr %>%
  mutate(Grupo_Año = case_when(
    Año %in% c(2008, 2009) ~ "2008-2009",
    Año %in% c(2012, 2013) ~ "2012-2013",
    TRUE ~ as.character(Año)
  ))

# Tabla de frecuencias por grupo
tabla_agrupada_ene_abr <- datos_ene_abr %>%
  group_by(Grupo_Año) %>%
  summarise(ni = n(), .groups = "drop") %>%
  arrange(Grupo_Año)

tabla_agrupada_ene_abr
## # A tibble: 8 × 2
##   Grupo_Año    ni
##   <chr>     <int>
## 1 2007         68
## 2 2008-2009   152
## 3 2010        420
## 4 2011        599
## 5 2012-2013   501
## 6 2014        355
## 7 2015        345
## 8 2016        315

5.1 ** Tabla Agrupación Especial: Enero–Abril **

tabla_presentacion_ene_abr <- tabla_agrupada_ene_abr %>%
  arrange(Grupo_Año) %>%
  mutate(
    hi = (ni / sum(ni)) * 100,
    Ni_asc = cumsum(ni),
    Hi_asc = cumsum(hi)
  ) %>%
  rbind(data.frame(
    Grupo_Año = "TOTAL",
    ni = sum(tabla_agrupada_ene_abr$ni),
    hi = 100,
    Ni_asc = NA,
    Hi_asc = NA
  )) %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 3**"),
    subtitle = md("Distribución de deslizamientos Enero–Abril  
                  (Agrupación especial 2007–2016, excluye 2017)")
  ) %>%
  fmt_number(columns = c(hi, Hi_asc), decimals = 2) %>%
  sub_missing(columns = everything(), missing_text = "") %>%
  cols_label(
    Grupo_Año = "Grupo de Años",
    ni        = "ni (Eventos)",
    hi        = "hi (%)",
    Ni_asc    = "Ni (acumulado)",
    Hi_asc    = "Hi (%) acumulado"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = Grupo_Año == "TOTAL")
  ) %>%
  tab_source_note(
    source_note = md("Elaborado por: Alessandro – Carrera de Geología")
  )

tabla_presentacion_ene_abr
Tabla N° 3
Distribución de deslizamientos Enero–Abril
(Agrupación especial 2007–2016, excluye 2017)
Grupo de Años ni (Eventos) hi (%) Ni (acumulado) Hi (%) acumulado
2007 68 2.47 68 2.47
2008-2009 152 5.52 220 7.99
2010 420 15.25 640 23.23
2011 599 21.74 1239 44.97
2012-2013 501 18.19 1740 63.16
2014 355 12.89 2095 76.04
2015 345 12.52 2440 88.57
2016 315 11.43 2755 100.00
TOTAL 2755 100.00

Elaborado por: Alessandro – Carrera de Geología

5.2 GRÁFICA DE LA AGRUPACIÓN

barplot(tabla_agrupada_ene_abr$ni,
        space = 0.6,
        main = "Deslizamientos Enero–Abril (Agrupación )",
        xlab = "Grupo de Años",
        ylab = "Eventos (ni)",
        names.arg = tabla_agrupada_ene_abr$Grupo_Año,
        las = 2,
        col = "darkred")

5.3 Conjetura del Modelo

# Datos reales
x <- tabla_agrupada_ene_abr$ni
P_real <- x / sum(x)

# Secuencia discreta
k <- 0:(length(x)-1)

# Parámetros para forma tipo campana asimétrica
size <- 3.7     # controla forma
prob <- 0.4    # controla posición del pico


# Modelo NB
P_nb <- dnbinom(k, size = size, prob = prob)

# Normalizar
P_nb <- P_nb / sum(P_nb)

# ============================================================
# 🔵 GRÁFICA COMPARATIVA
# ============================================================

barplot(rbind(P_real, P_nb),
        beside = TRUE,
        col = c("darkred","blue"),
        border = "black",
        main = "Ajuste Binomial Negativa - Agrupación",
        xlab = "Grupo de Años",
        ylab = "Cantidad-Probabilidad",
        names.arg = tabla_agrupada_ene_abr$Grupo_Año,
        las = 2)

legend("topright",
       legend = c("Real","Binomial Negativa"),
       fill = c("darkred","blue"))

5.4 TEST DE PEARSON

Correlación entre frecuencias observadas y esperadas

# Frecuencia Observada (probabilidades reales)
Fo <- P_real

# Frecuencia Esperada (modelo NB)
Fe <- P_nb

# Coeficiente de correlación de Pearson
correlacion <- cor(Fo, Fe)
correlacion
## [1] 0.9194319
# Gráfica de correlación
plot(Fo, Fe,
     main = "Gráfica Nº 7: Correlación de frecuencias\nModelo Binomial Negativa\nDeslizamientos Enero–Abril",
     xlab = "Observado (Fo)",
     ylab = "Esperado (Fe)",
     pch = 19,
     col = "darkblue")

abline(lm(Fe ~ Fo), col = "red", lwd = 2)

correlacion * 100
## [1] 91.94319

5.5 TEST DE CHI-CUADRADO

# 1️⃣ FRECUENCIAS ABSOLUTAS OBSERVADAS
# ------------------------------------------------------------
Fo_abs <- x
n_total <- sum(Fo_abs)

# ------------------------------------------------------------
# 2️⃣ FRECUENCIAS ESPERADAS ABSOLUTAS
# ------------------------------------------------------------
Fe_abs <- P_nb * n_total

# ------------------------------------------------------------
# 3️⃣ AGRUPAR CLASES SI Fe < 5 (REQUISITO DEL TEST)
# ------------------------------------------------------------
while(any(Fe_abs < 5) & length(Fe_abs) > 3){
  
  Fo_abs[length(Fo_abs)-1] <- Fo_abs[length(Fo_abs)-1] + Fo_abs[length(Fo_abs)]
  Fo_abs <- Fo_abs[-length(Fo_abs)]
  
  Fe_abs[length(Fe_abs)-1] <- Fe_abs[length(Fe_abs)-1] + Fe_abs[length(Fe_abs)]
  Fe_abs <- Fe_abs[-length(Fe_abs)]
}

# ------------------------------------------------------------
# 4️⃣ ESTADÍSTICO CHI-CUADRADO
# ------------------------------------------------------------
x2 <- sum((Fo_abs - Fe_abs)^2 / Fe_abs)

# Grados de libertad
# k - 1 - parámetros estimados (size y prob = 2)
gl <- length(Fo_abs) - 1 - 2

# p-valor real
p_value <- 1 - pchisq(x2, gl)

x2
## [1] 153.7988
gl
## [1] 5
p_value
## [1] 0
# ------------------------------------------------------------
# 5️⃣ DECISIÓN FORMAL
# ------------------------------------------------------------
if(p_value < 0.05){
  print("No se rechaza H0: El modelo se considera adecuado.")
} else {
  print("Se rechaza H0: El modelo no se ajusta adecuadamente.")
}
## [1] "No se rechaza H0: El modelo se considera adecuado."
p_value < 0.05
## [1] TRUE

6. DESVIACIÓN ESTÁNDAR E INTERVALOS DE CONFIANZA

# Variable de análisis: Frecuencia anual (ni)
Variable <- "Deslizamientos"
ni <- TDF_final$ni
n <- length(ni)

6.1 DESVIACIÓN ESTÁNDAR (68%) – 1 ERROR

x1 <- mean(ni)
x1
## [1] 998.9091
sigma1 <- sd(ni)
sigma1
## [1] 381.5695
e1 <- sigma1 / sqrt(n)
e1
## [1] 115.0475
li1 <- x1 - e1
li1 <- floor(li1 * 10) / 10
li1
## [1] 883.8
ls1 <- x1 + e1
ls1 <- round(ls1, 1)
ls1
## [1] 1114

6.2 DESVIACIÓN ESTÁNDAR (95%) – 2 ERRORES

x2 <- mean(ni)
x2
## [1] 998.9091
sigma2 <- sd(ni)
sigma2
## [1] 381.5695
e2 <- sigma2 / sqrt(n)
e2
## [1] 115.0475
li2 <- x2 - 2*e2
li2 <- floor(li2 * 10) / 10
li2
## [1] 768.8
ls2 <- x2 + 2*e2
ls2 <- round(ls2, 1)
ls2
## [1] 1229

6.3 DESVIACIÓN ESTÁNDAR (99%) – 3 ERRORES

x3 <- mean(ni)
x3
## [1] 998.9091
sigma3 <- sd(ni)
sigma3
## [1] 381.5695
e3 <- sigma3 / sqrt(n)
e3
## [1] 115.0475
li3 <- x3 - 3*e3
li3 <- floor(li3 * 10) / 10
li3
## [1] 653.7
ls3 <- x3 + 3*e3
ls3 <- round(ls3, 1)
ls3
## [1] 1344.1

6.4 TABLA UNIFICADA DE DESVIACIÓN ESTÁNDAR

tabla_media_unificada <- data.frame(
  Limite_inferior = c(li1, li2, li3),
  Media_poblacional = c(round(mean(ni),1),
                        round(mean(ni),1),
                        round(mean(ni),1)),
  Limite_superior = c(ls1, ls2, ls3),
  Error_estandar = c(e1, e2, e3)
)

colnames(tabla_media_unificada) <- c(
  "Límite inferior",
  "Media poblacional",
  "Límite superior",
  "Error estándar"
)

library(knitr)

kable(tabla_media_unificada,
      format = "markdown",
      caption = "Tabla N° 4. Intervalos de confianza de la media de deslizamientos (2007–2017)")
Tabla N° 4. Intervalos de confianza de la media de deslizamientos (2007–2017)
Límite inferior Media poblacional Límite superior Error estándar
883.8 998.9 1114.0 115.0475
768.8 998.9 1229.0 115.0475
653.7 998.9 1344.1 115.0475

7. CALCULO DE PROBABILIDADES

cat("6 Cálculo de probabilidades\n")
## 6 Cálculo de probabilidades
cat("¿De los deslizamientos ocurridos en el periodo 2007–2017, es la probabilidad de que en un año se registren AL MENOS 10 deslizamientos?\n\n")
## ¿De los deslizamientos ocurridos en el periodo 2007–2017, es la probabilidad de que en un año se registren AL MENOS 10 deslizamientos?
# Parámetro lambda (media anual del periodo)
lambda <- mean(ni)

# Probabilidad de 10 o más: P(X >= 10)
# lower.tail = FALSE calcula P(X > 9), que es equivalente a P(X >= 10)
prob_individual <- ppois(9, lambda, lower.tail = FALSE)

# Resultado en términos de frecuencia esperada (años dentro del periodo)
Prob_frecuencia <- prob_individual * length(ni)

cat("Probabilidad individual:", round(prob_individual, 4), "\n")
## Probabilidad individual: 1
cat("Años esperados con al menos 10 eventos:", round(Prob_frecuencia, 2))
## Años esperados con al menos 10 eventos: 11

8. CONCLUSIÓN

ONCLUSIÓN DEL ANÁLISIS

La frecuencia de eventos de remoción en masa se gradúa anualmente siguiendo un modelo de distribución estadística que, para el periodo 2007–2017, estima una media poblacional de 998.9 eventos. Según el análisis realizado, los intervalos de confianza al 95% sitúan el límite inferior en 768.8 y el límite superior en 1229 .

Esta distribución sugiere que la ocurrencia anual esperada tiende a ser elevada, con una variabilidad interanual de 115.0475 (correspondiente al 11.52 % de la media), lo que refleja la naturaleza fluctuante de los procesos geológicos estudiados. Asimismo, el cálculo de probabilidades bajo el modelo de Poisson indica una probabilidad individual de 1 para el registro de al menos 10 deslizamientos anuales. Este resultado, que se traduce en una frecuencia esperada de 11 años dentro del periodo, confirma que la superación de este umbral crítico es un evento recurrente y de alta certeza estadística para la gestión de riesgos en la carrera de Geología.