Este informe presenta un análisis descriptivo de la sismicidad registrada en Colombia durante los últimos 20 años, con base en el catálogo sísmico suministrado (query.csv, fuente USGS). Más allá de describir los datos, el análisis busca aportar evidencia para responder una pregunta central: ¿por qué, con toda la tecnología disponible, todavía no es posible predecir un sismo, y qué hace que la sismicidad sea, al mismo tiempo, un fenómeno “sistemático”? El documento se organiza en cuatro capítulos:

  1. Descripción de los sismos por rangos de magnitud y profundidad.
  2. Descripción temporal: frecuencia de ocurrencia según intensidad y serie de tiempo anual.
  3. Descripción espacial: identificación de las zonas de mayor frecuencia sísmica.
  4. Conclusiones generales y recomendaciones para la toma de decisiones.

0.1 Carga y preparación de los datos

# --- Cargar datos ---
# Guardarlos en sismos_raw 
sismos_raw = read_csv("query.csv", show_col_types = FALSE)# show col es para que no muestre
#el número de columnas.

# --- Limpieza y preparación ---
sismos = sismos_raw %>% # %>% (Pipe):Su función principal es encadenar funciones de forma secuencial, eliminando la necesidad de anidar código o crear variables intermedias basura.
  mutate(
    time  = ymd_hms(time, tz = "UTC"),#Convierte el texto de la columna time a un objeto de fecha y hora (date-time) en zona horaria UTC (Universal Time Coordinated).
    fecha = as_date(time), #Extrae únicamente la fecha (Año-Mes-Día).
    anio  = year(time), # Extrae(Crea una Variable) el año  
    mes_num = month(time), #Extrae número de mes (1 al 12)
    mes   = factor(mes_num, #Vuelve los meses de números a texto ordenado.
                    levels = 1:12,
                    labels = c("Ene","Feb","Mar","Abr","May","Jun",
                               "Jul","Ago","Sep","Oct","Nov","Dic")),
    hora  = hour(time) #Variable para la hora exacta (0 a 23)
  ) %>%
  # Nos quedamos únicamente con eventos localizados en Colombia
  filter(str_detect(place, "Colombia")) %>%
  # Últimos 20 años a partir de la fecha del reporte
  filter(fecha >= (Sys.Date() - years(20))) %>%
  filter(type == "earthquake") %>%
  mutate(
    lugar_corto = str_remove(place, ",\\s*Colombia$") %>%
      str_remove("^\\d+\\s*km\\s*(N|S|E|W|NE|NW|SE|SW|NNE|NNW|SSE|SSW|ENE|ESE|WNW|WSW)?\\s*(of|from)?\\s*") #Se eliminan prefijos 
  )

n_total <- nrow(sismos)
rango_fechas <- range(sismos$fecha)

El conjunto de datos depurado contiene 668 eventos sísmicos ocurridos en territorio colombiano entre 06/09/2006 y 10/08/2026.

Nota metodológica: el catálogo del USGS reporta de forma más completa los sismos con magnitud igual o superior a 4.5, por lo cual los sismos de menor magnitud (frecuentes pero de escasa percepción) están subrepresentados. Las conclusiones deben leerse teniendo en cuenta este umbral de detección.


1 Capítulo 1: Descripción por rangos de magnitud y profundidad

1.1 Clasificación de los sismos

Para su análisis, los sismos se clasificaron según rangos de magnitud (escala de momento/mb según reporte) y rangos de profundidad, siguiendo criterios usados habitualmente en sismología:

sismos <- sismos %>%
  mutate(
    rango_mag = case_when( #case_when(): Evalúa la columna numérica mag e asigna una #etiqueta de texto según el intervalo en el que cae cada valor.
      mag < 4.5             ~ "Menor (< 4.5)",
      mag >= 4.5 & mag < 5.0 ~ "Ligero (4.5 - 4.9)",
      mag >= 5.0 & mag < 6.0 ~ "Moderado (5.0 - 5.9)",
      mag >= 6.0 & mag < 7.0 ~ "Fuerte (6.0 - 6.9)",
      mag >= 7.0             ~ "Mayor (≥ 7.0)"
    ),
    rango_mag = factor(rango_mag, levels = c("Menor (< 4.5)", "Ligero (4.5 - 4.9)",
                                              "Moderado (5.0 - 5.9)", "Fuerte (6.0 - 6.9)",
                                              "Mayor (≥ 7.0)")),#da un orden lógico al text
    rango_prof = case_when(
      depth < 70              ~ "Superficial (< 70 km)",
      depth >= 70 & depth < 300 ~ "Intermedio (70 - 300 km)",
      depth >= 300             ~ "Profundo (≥ 300 km)"
    ),
    rango_prof = factor(rango_prof, levels = c("Superficial (< 70 km)",
                                                "Intermedio (70 - 300 km)",
                                                "Profundo (≥ 300 km)"))
  )

1.2 Distribución por magnitud

tab_mag <- sismos %>%
  count(rango_mag, name = "n") %>%
  mutate(porcentaje = percent(n / sum(n), accuracy = 0.1))

kable(tab_mag, col.names = c("Rango de magnitud", "N° de sismos", "% del total"),
      caption = "Distribución de sismos por rango de magnitud") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Distribución de sismos por rango de magnitud
Rango de magnitud N° de sismos % del total
Ligero (4.5 - 4.9) 548 82.0%
Moderado (5.0 - 5.9) 107 16.0%
Fuerte (6.0 - 6.9) 11 1.6%
Mayor (≥ 7.0) 2 0.3%
ggplot(sismos, aes(x = rango_mag, fill = rango_mag)) +
  geom_bar() +
  geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.4) +
  labs(title = "Número de sismos por rango de magnitud",
       x = "Rango de magnitud", y = "Número de sismos") +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none")

1.2.1 Estadística descriptiva de la magnitud

stats_mag <- sismos %>%
  summarise(
    Mínimo               = min(mag),
    `Percentil 25`        = quantile(mag, 0.25),
    Mediana               = median(mag),
    Media                 = mean(mag),
    `Percentil 75`        = quantile(mag, 0.75),
    Máximo                = max(mag),
    `Desv. estándar`      = sd(mag),
    `Coef. de variación (%)` = sd(mag) / mean(mag) * 100
  ) %>%
  mutate(across(everything(), ~ round(.x, 2))) %>%
  pivot_longer(everything(), names_to = "Estadístico", values_to = "Valor")

kable(stats_mag, caption = "Estadística descriptiva global de la magnitud (escala reportada)") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Estadística descriptiva global de la magnitud (escala reportada)
Estadístico Valor
Mínimo 4.50
Percentil 25 4.50
Mediana 4.60
Media 4.75
Percentil 75 4.90
Máximo 7.40
Desv. estándar 0.36
Coef. de variación (%) 7.53
mag_moda <- tab_mag %>% filter(n == max(n)) %>% pull(rango_mag) %>% as.character() %>% first()
mag_asimetria <- round(mean(sismos$mag) - median(sismos$mag), 2)
mag_rara <- tab_mag %>% filter(n == min(n)) %>% pull(rango_mag) %>% as.character() %>% first()
n_mag_moda <- tab_mag %>% filter(n == max(n)) %>% pull(n) %>% first()
n_mag_rara <- tab_mag %>% filter(n == min(n)) %>% pull(n) %>% first()

La magnitud promedio de los sismos analizados es de 4.75, con una mediana de 4.6,al promedio representar un valor ligeramente superior, evidencia que la mayoría de los sismos se presentaron en magnitudes ligeras (4.5 - 4.9) de baja a moderada intensidad; esto se ve reforzado al observar que la moda corresponde a esta categoría, siendo la más frecuente con 548 eventos.Además, la pequeña diferencia entre la media y la mediana 0.15 sugiere una distribución sesgada a la derecha, impulsada por los pocos eventos fuertes y mayores. Por otra parte, la categoría más inusual es Mayor (≥ 7.0), con apenas 2 eventos en 20 años. La dispersión de la magnitud (desviación estándar de 0.36) es relativamente baja, lo cual es esperable dado que los datos capturan sobre todo sismos con magnitud ≥ 4.5.

Los sismos de las categorías más frecuentes (Ligero y Moderado) liberan mucha menos energía de la que intuitivamente se pensaría. De acuerdo con el Servicio Geológico de los Estados Unidos (USGS), la magnitud mide la energía sísmica radiada a través de ondas que viajan por la Tierra y sacuden el suelo, y esta escala es de carácter logarítmico, de modo que cada unidad de aumento equivale a liberar cerca de 32 veces más energía radiada. Así, un sismo de magnitud 6.0 no libera “el doble” de energía que uno de 5.0, sino cerca de 32 veces más, y uno de 7.0 libera cerca de 1.000 veces más energía que uno de 5.0, por eso los eventos frecuentes (Ligero/Moderado) casi nunca causan daños estructurales; por lo general, solo se sienten o pasan inadvertidos; mientras que, los sismos de categoría ‘Fuerte’ o ‘Mayor’, los cuales equivalen a un porcentaje muy pequeño de los registros, son precisamente los que concentran la mayor fuerza destructiva y representan el verdadero riesgo de impacto ambiental y daños materiales, como lo vivido de forma desgarradora el pasado 10 de agosto del 2026.

1.3 Distribución por profundidad

Al clasificar la información según la profundidad a la que ocurren estos temblores, se identifican dos comportamientos claramente diferenciados:

Sismos superficiales: Ocurren a poca profundidad y están vinculados a rupturas o fracturas en la corteza terrestre. Estos eventos se asocian directamente con las fallas corticales, que son grietas o zonas de debilidad en la capa más externa del planeta donde se acumula y libera energía.

Sismos de profundidad intermedia y profunda: Ocurren a niveles mucho más profundos de la Tierra. Este fenómeno se explica por la subducción de la placa de Nazca bajo la placa Suramericana, un proceso tectónico en el cual la placa oceánica de Nazca se desliza por debajo del continente americano, generando fricción y sismicidad a grandes profundidades.

Diagrama de proceso de subducción plaza Nazca y placa Sudamericana extraída de gov.co
Diagrama de proceso de subducción plaza Nazca y placa Sudamericana extraída de gov.co
tab_prof <- sismos %>%
  count(rango_prof, name = "n") %>%
  mutate(porcentaje = percent(n / sum(n), accuracy = 0.1))

kable(tab_prof, col.names = c("Rango de profundidad", "N° de sismos", "% del total"),
      caption = "Distribución de sismos por rango de profundidad") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Distribución de sismos por rango de profundidad
Rango de profundidad N° de sismos % del total
Superficial (< 70 km) 348 52.1%
Intermedio (70 - 300 km) 319 47.8%
Profundo (≥ 300 km) 1 0.1%
ggplot(sismos, aes(x = rango_prof, fill = rango_prof)) +
  geom_bar() +
  geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.4) +
  labs(title = "Número de sismos por rango de profundidad",
       x = "Rango de profundidad", y = "Número de sismos") +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none")

1.3.1 Estadística descriptiva de la profundidad

stats_prof <- sismos %>%
  summarise(
    Mínimo               = min(depth),
    `Percentil 25`        = quantile(depth, 0.25),
    Mediana               = median(depth),
    Media                 = mean(depth),
    `Percentil 75`        = quantile(depth, 0.75),
    Máximo                = max(depth),
    `Desv. estándar`      = sd(depth),
    `Coef. de variación (%)` = sd(depth) / mean(depth) * 100
  ) %>%
  mutate(across(everything(), ~ round(.x, 1))) %>%
  pivot_longer(everything(), names_to = "Estadístico", values_to = "Valor")

kable(stats_prof, caption = "Estadística descriptiva global de la profundidad (km)") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Estadística descriptiva global de la profundidad (km)
Estadístico Valor
Mínimo 2.7
Percentil 25 18.4
Mediana 61.8
Media 84.3
Percentil 75 154.6
Máximo 436.5
Desv. estándar 65.1
Coef. de variación (%) 77.2
prof_moda <- tab_prof %>% filter(n == max(n)) %>% pull(rango_prof) %>% as.character() %>% first()
n_prof_moda <- tab_prof %>% filter(n == max(n)) %>% pull(n) %>% first()
prof_rara <- tab_prof %>% filter(n == min(n)) %>% pull(rango_prof) %>% as.character() %>% first()
n_prof_rara <- tab_prof %>% filter(n == min(n)) %>% pull(n) %>% first()

La profundidad promedio de los sismos fue de 84,3 km, mientras que la mediana fue de 61,8 km, lo que indica que la mayoría de los eventos se concentran a profundidades relativamente bajas, esto se observa también en la gráfica, donde predominan los sismos superficiales (<70 km), con 348 eventos, mientras que los profundos (≥300 km) son muy poco frecuentes, con solo 1 evento, el cual ocurrió en el año 2007 en Ubalá. La diferencia entre la media y la mediana, junto con el máximo de 436,5 km, sugiere una distribución con sesgo hacia valores altos, causada por algunos eventos mucho más profundos. Además, el coeficiente de variación de 77,2 % muestra una dispersión considerable de las profundidades.

Desde el punto de vista sísmico, esta distribución es importante porque la profundidad influye en los efectos que llegan a la superficie, un sismo superficial puede generar una mayor intensidad y potencial de daño que uno más profundo, debido a que las ondas recorren una menor distancia antes de alcanzar la superficie.

1.4 Relación magnitud - profundidad

sismos %>%
  count(rango_mag, rango_prof) %>%
  ggplot(aes(x = rango_mag, y = rango_prof, fill = n)) +
  geom_tile(color = "white") +
  geom_text(aes(label = n), color = "white", size = 3.5) +
  scale_fill_gradient(low = "#a1d99b", high = "#08519c") +
  labs(title = "Cruce entre rango de magnitud y rango de profundidad",
       x = "Rango de magnitud", y = "Rango de profundidad", fill = "N° sismos") +
  theme_minimal(base_size = 12) +
  theme(axis.text.x = element_text(angle = 20, hjust = 1))

ggplot(sismos, aes(x = depth, y = mag, color = rango_mag)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed", linewidth = 0.6) +
  labs(title = "Relación entre profundidad y magnitud",
       x = "Profundidad (km)", y = "Magnitud", color = "Rango de magnitud") +
  theme_minimal(base_size = 12)

La relación entre magnitud y profundidad permite observar que los sismos pueden presentarse a diferentes profundidades sin que necesariamente exista una relación directa entre ambas variables. Sin embargo, un sismo de magnitud moderada o alta puede generar mayores efectos cuando ocurre a poca profundidad.

Lectura del capítulo: la mayoría de los eventos se concentran en las categorías de menor magnitud (umbral de detección del catálogo) y presentan tanto sismos superficiales, asociados a fallas corticales, como sismos de profundidad intermedia y profunda, relacionados con la subducción de la placa Nazca bajo la placa Suramericana.


2 Capítulo 2: Descripción temporal

2.1 Frecuencia de ocurrencia según intensidad (tiempo entre eventos)

Se calculó el tiempo promedio transcurrido entre sismos consecutivos de cada rango de magnitud, como aproximación a la recurrencia de cada nivel de intensidad.

recurrencia <- sismos %>%
  arrange(rango_mag, time) %>%
  group_by(rango_mag) %>%
  mutate(dias_desde_anterior = as.numeric(difftime(time, lag(time), units = "days"))) %>%
  summarise(
    n_eventos = n(),
    promedio_dias_entre_eventos = round(mean(dias_desde_anterior, na.rm = TRUE), 1),
    mediana_dias_entre_eventos  = round(median(dias_desde_anterior, na.rm = TRUE), 1),
    .groups = "drop"
  )

kable(recurrencia,
      col.names = c("Rango de magnitud", "N° eventos", "Promedio días entre eventos",
                    "Mediana días entre eventos"),
      caption = "Frecuencia de ocurrencia por rango de magnitud") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Frecuencia de ocurrencia por rango de magnitud
Rango de magnitud N° eventos Promedio días entre eventos Mediana días entre eventos
Ligero (4.5 - 4.9) 548 13.3 8.9
Moderado (5.0 - 5.9) 107 67.3 47.5
Fuerte (6.0 - 6.9) 11 665.8 563.7
Mayor (≥ 7.0) 2 5061.8 5061.8
ggplot(recurrencia, aes(x = rango_mag, y = promedio_dias_entre_eventos, fill = rango_mag)) +
  geom_col() +
  geom_text(aes(label = promedio_dias_entre_eventos), vjust = -0.4) +
  labs(title = "Tiempo promedio entre sismos según rango de magnitud",
       x = "Rango de magnitud", y = "Días promedio entre eventos") +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none")

dias_ligero   <- recurrencia %>% filter(rango_mag == "Ligero (4.5 - 4.9)")   %>% pull(promedio_dias_entre_eventos)
dias_moderado <- recurrencia %>% filter(rango_mag == "Moderado (5.0 - 5.9)") %>% pull(promedio_dias_entre_eventos)
dias_fuerte   <- recurrencia %>% filter(rango_mag == "Fuerte (6.0 - 6.9)")   %>% pull(promedio_dias_entre_eventos)
dias_mayor    <- recurrencia %>% filter(rango_mag == "Mayor (≥ 7.0)")       %>% pull(promedio_dias_entre_eventos)
anios_mayor   <- round(ifelse(length(dias_mayor) > 0 && !is.na(dias_mayor), dias_mayor / 365, NA), 1)

De acuerdo a las gráficas se puede observar un patrón, los sismos de menor magnitud ocurren con mayor frecuencia, por lo que el intervalo entre ellos es menor, en cambio, los sismos fuertes y mayores presentan intervalos más largos, lo que confirma que son eventos menos frecuentes. De acuerdo a los datos y lo representado en la gráfica los sismos Ligeros ocurren en promedio cada13.3 días,los Moderados cada67.3 días,los Fuertes cada665.8 días (~1.8 años),y los de categoría Mayor cada 5061.8 días (~13.9 años).

2.2 Serie de tiempo anual

serie_anual <- sismos %>%
  count(anio, name = "n_sismos")

ggplot(serie_anual, aes(x = anio, y = n_sismos)) +
  geom_line(color = "steelblue", linewidth = 1) +
  geom_point(color = "steelblue", size = 2) +
  geom_smooth(method = "loess", se = FALSE, color = "darkred", linetype = "dashed") +
  scale_x_continuous(breaks = pretty_breaks(n = 10)) +
  labs(title = "Serie de tiempo anual de sismos en Colombia",
       subtitle = "Línea punteada: tendencia suavizada (loess)",
       x = "Año", y = "Número de sismos") +
  theme_minimal(base_size = 12)

La cantidad de sismos no se mantiene constante durante los años analizados, sino que presenta variaciones y algunos picos de ocurrencia, entre estos se destacan los años 2007, 2014 y 2023, donde se observa una mayor cantidad de eventos registrados. El año 2023 presenta el mayor número, con 55 sismos; pero, en general, estos cambios muestran que la ocurrencia de los sismos varía de un año a otro, aunque con esta gráfica no se puede afirmar que exista una tendencia creciente o decreciente de la actividad sísmica.

serie_anual_mag <- sismos %>%
  count(anio, rango_mag, name = "n")

ggplot(serie_anual_mag, aes(x = anio, y = n, fill = rango_mag)) +
  geom_col(position = "stack") +
  scale_x_continuous(breaks = pretty_breaks(n = 10)) +
  labs(title = "Sismos por año, según rango de magnitud",
       x = "Año", y = "Número de sismos", fill = "Rango de magnitud") +
  theme_minimal(base_size = 12)

En los diferentes años predominan los sismos de magnitud baja, mientras que los eventos moderados, fuertes y mayores aparecen en menor proporción. Esto indica que los cambios en la cantidad total de sismos de cada año están determinados principalmente por los eventos de menor magnitud. Además, se observa que el 2023, al ser el año con mayor número de sismos registrados, también presenta una mayor cantidad de eventos pequeños. Por lo tanto, aunque existen variaciones entre años, los sismos de baja magnitud son los que tienen mayor peso dentro del comportamiento general del período.

2.3 Estacionalidad mensual

serie_mensual <- sismos %>%
  count(mes, name = "n_sismos")

ggplot(serie_mensual, aes(x = mes, y = n_sismos)) +
  geom_col(fill = "darkorange") +
  labs(title = "Distribución mensual de sismos (todos los años agregados)",
       x = "Mes", y = "Número de sismos") +
  theme_minimal(base_size = 12)

# Prueba chi-cuadrado de bondad de ajuste: ¿la distribución mensual es uniforme?
test_mensual <- chisq.test(serie_mensual$n_sismos)
mes_top <- serie_mensual %>% filter(n_sismos == max(n_sismos)) %>% pull(mes) %>% as.character()
mes_bajo <- serie_mensual %>% filter(n_sismos == min(n_sismos)) %>% pull(mes) %>% as.character()

La gráfica permite identificar los meses con mayor y menor cantidad de registros, el mes con más eventos es Mar y el de menos es Jun, pero la diferencia entre meses es relativamente pequeña en comparación con el total. Sin embargo, una mayor cantidad de sismos en determinados meses no significa necesariamente que exista una relación causal con la época del año (porque su origen es la acumulación y liberación de esfuerzo dentro de la corteza terrestre); se trata principalmente de una descripción de la distribución temporal de los datos.

2.4 Estadística descriptiva detallada por periodos

Para identificar en qué periodos ha habido mayor frecuencia de sismos según su intensidad (por ejemplo, si los sismos ligeros se concentran en algún tramo de tiempo particular), el rango total de años analizado se dividió en periodos consecutivos de duración similar (~5 años cada uno).

anio_min <- min(sismos$anio)
anio_max <- max(sismos$anio)
amplitud_periodo <- 5

sismos <- sismos %>%
  mutate(
    periodo_ini = anio_min + amplitud_periodo * ((anio - anio_min) %/% amplitud_periodo),
    periodo_fin = pmin(periodo_ini + amplitud_periodo - 1, anio_max),
    periodo = paste0(periodo_ini, "-", periodo_fin)
  ) %>%
  mutate(periodo = fct_reorder(periodo, periodo_ini))

tab_periodo_mag <- sismos %>%
  count(periodo, rango_mag) %>%
  pivot_wider(names_from = rango_mag, values_from = n, values_fill = 0)

kable(tab_periodo_mag,
      caption = "N° de sismos por periodo y rango de magnitud") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
N° de sismos por periodo y rango de magnitud
periodo Ligero (4.5 - 4.9) Moderado (5.0 - 5.9) Fuerte (6.0 - 6.9) Mayor (≥ 7.0)
2006-2010 84 22 3 0
2011-2015 127 22 3 1
2016-2020 152 33 3 0
2021-2025 170 28 2 0
2026-2026 15 2 0 1
ggplot(sismos, aes(x = periodo, fill = rango_mag)) +
  geom_bar(position = "dodge") +
  labs(title = "Frecuencia de sismos por periodo, según rango de magnitud",
       x = "Periodo", y = "Número de sismos", fill = "Rango de magnitud") +
  theme_minimal(base_size = 12) +
  theme(axis.text.x = element_text(angle = 20, hjust = 1))

# Periodo con mayor frecuencia para cada rango de magnitud (insight automático)
periodo_top_por_rango <- sismos %>%
  count(rango_mag, periodo) %>%
  group_by(rango_mag) %>%
  slice_max(n, n = 1, with_ties = FALSE) %>%
  ungroup() %>%
  rename(`Periodo de mayor frecuencia` = periodo, `N° de sismos` = n)

kable(periodo_top_por_rango,
      col.names = c("Rango de magnitud", "Periodo de mayor frecuencia", "N° de sismos"),
      caption = "Periodo con mayor número de eventos, para cada rango de magnitud") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Periodo con mayor número de eventos, para cada rango de magnitud
Rango de magnitud Periodo de mayor frecuencia N° de sismos
Ligero (4.5 - 4.9) 2021-2025 170
Moderado (5.0 - 5.9) 2016-2020 33
Fuerte (6.0 - 6.9) 2006-2010 3
Mayor (≥ 7.0) 2011-2015 1
periodo_ligero <- periodo_top_por_rango %>%
  filter(rango_mag == "Ligero (4.5 - 4.9)") %>%
  pull(`Periodo de mayor frecuencia`)

n_periodo_ligero <- periodo_top_por_rango %>%
  filter(rango_mag == "Ligero (4.5 - 4.9)") %>%
  pull(`N° de sismos`)

La tabla anterior identifica, para cada rango de magnitud, el periodo en el que se concentró el mayor número de eventos. Por ejemplo, para los sismos de intensidad Ligera el periodo con más ocurrencias fue 2021-2025, con 170 eventos registrados, algo importante a recalcar, es que, el periodo con mayor frecuencia Mayor (≥ 7.0) en la tabla es 2011-2015;sin embargo tmbn hay un registro en el 2026. Al observar la tabla se puede detectar si ciertos periodos concentran más actividad de una intensidad específica, esto puede deberse a mejoras en la instrumentación y detección de la red sismológica a lo largo del tiempo.

2.5 Distribución por franja horaria

sismos <- sismos %>%
  mutate(
    franja_horaria = case_when(
      hora >= 0  & hora < 6  ~ "Madrugada (00-06h)",
      hora >= 6  & hora < 12 ~ "Mañana (06-12h)",
      hora >= 12 & hora < 18 ~ "Tarde (12-18h)",
      hora >= 18             ~ "Noche (18-24h)"
    ),
    franja_horaria = factor(franja_horaria,
                             levels = c("Madrugada (00-06h)", "Mañana (06-12h)",
                                        "Tarde (12-18h)", "Noche (18-24h)"))
  )

tab_franja <- sismos %>%
  count(franja_horaria, name = "n") %>%
  mutate(porcentaje = percent(n / sum(n), accuracy = 0.1))

kable(tab_franja, col.names = c("Franja horaria (hora UTC)", "N° de sismos", "% del total"),
      caption = "Distribución de sismos por franja horaria") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Distribución de sismos por franja horaria
Franja horaria (hora UTC) N° de sismos % del total
Madrugada (00-06h) 167 25.0%
Mañana (06-12h) 156 23.4%
Tarde (12-18h) 184 27.5%
Noche (18-24h) 161 24.1%
ggplot(sismos, aes(x = franja_horaria, fill = franja_horaria)) +
  geom_bar() +
  geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.4) +
  labs(title = "Número de sismos por franja horaria",
       x = "Franja horaria (hora UTC)", y = "Número de sismos") +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none")

test_franja <- chisq.test(tab_franja$n)
franja_top <- tab_franja %>% filter(n == max(n)) %>% pull(franja_horaria) %>% as.character()
franja_bajo <- tab_franja %>% filter(n == min(n)) %>% pull(franja_horaria) %>% as.character()
diff_pct_franja <- round((max(tab_franja$n) - min(tab_franja$n)) / sum(tab_franja$n) * 100, 1)

La franja con más eventos es Tarde (12-18h) y la de menos es Mañana (06-12h), pero la diferencia entre la franja más y menos activa es de solo 4.2% del total un resultado inapreciable. Por lo tanto, no hay evidencia de que la hora del día influya en la ocurrencia de sismos.

Lectura del capítulo: los sismos de mayor magnitud son notablemente menos frecuentes que los de magnitud moderada o ligera, consistente con la relación de Gutenberg-Richter. La serie anual permite identificar años con actividad sísmica atípica (posibles secuencias de réplicas o enjambres sísmicos), la estacionalidad mensual sirve para descartar o confirmar patrones estacionales (en general, la sismicidad tectónica no debería mostrar estacionalidad fuerte), y el análisis por periodos y franjas horarias permite ubicar con mayor precisión cuándo se concentra la actividad de cada nivel de intensidad.


3 Capítulo 3: Descripción espacial

3.1 Zonas de mayor frecuencia sísmica

top_zonas <- sismos %>%
  count(lugar_corto, name = "n_sismos") %>%
  arrange(desc(n_sismos)) %>%
  slice_head(n = 15)

kable(top_zonas, col.names = c("Zona / referencia geográfica", "N° de sismos"),
      caption = "Top 15 zonas con mayor número de sismos reportados") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Top 15 zonas con mayor número de sismos reportados
Zona / referencia geográfica N° de sismos
NW of Cepitá 26
SE of Cepitá 22
Cepitá 20
W of Cepitá 20
Jordán 15
E of Cepitá 14
NE of Jordán 14
SW of Bahía Solano 11
Nuquí 9
Mosquera 8
NE of Cepitá 8
northern Colombia 8
Aratoca 7
SW of Nuquí 7
W of Nuquí 7
ggplot(top_zonas, aes(x = reorder(lugar_corto, n_sismos), y = n_sismos)) +
  geom_col(fill = "seagreen") +
  coord_flip() +
  labs(title = "Zonas con mayor frecuencia sísmica",
       x = NULL, y = "Número de sismos") +
  theme_minimal(base_size = 11)

3.1.1 ¿Qué hay en el subsuelo de esas zonas? Explicación geológica

zona_top1 <- top_zonas$lugar_corto[1]

# Profundidad promedio de los eventos en la zona más frecuente
prof_zona_top1 <- sismos %>%
  filter(lugar_corto == zona_top1) %>%
  summarise(media = round(mean(depth), 1), n = n())

La zona con más eventos registrados es NW of Cepitá, con una profundidad promedio de 157.4 km y 26 eventos, seguido de distintos puntos cardinales del mismo municipio Cepitá en el departamento de Santander, si observamos los siguientes lugares como Aratoca o Jordán se encuentran en este mismo departamento, dejándonos ver una aglomeración. Este resultado tan específica no parece deberse al muestreo, sino un patrón biológico/geológico real. Casi todas las localidades que encabezan la lista corresponden al Nido Sísmico de Bucaramanga, ubicado debajo del municipio de Los Santos. Según la información expuesta por el Servicio Geológico Colombiano, este lugar presenta una densidad inusualmente alta de sismicidad a profundidades intermedias (entre 120 y 180 km), representando cerca del 60% de los sismos del país.

Adicionalmente, se presenta un segundo grupo de zonas más frecuentes (Nuquí, Bahía Solano, Pizarro, Riosucio, Mosquera) que se ubican en el Pacífico colombiano (Chocó y Nariño), Como explica también un reportaje de la BBC Mundo sobre la dinámica tectónica de la región, aquí la causa responde a otro fenómeno sistemático, el proceso de subducción de la placa de Nazca debajo de la placa Suramericana a lo largo de la costa mostrado en el gif del Cap. 2.

3.2 Mapa interactivo de sismicidad

El siguiente mapa muestra la ubicación de cada evento (tamaño proporcional a la magnitud, color según rango de magnitud) y un mapa de calor de densidad de eventos.

pal <- colorFactor(
  palette = c("#2c7fb8", "#41b6c4", "#f0e442", "#e6550d", "#a50f15"),
  domain = levels(sismos$rango_mag)
)

leaflet(sismos) %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addCircleMarkers(
    lng = ~longitude, lat = ~latitude,
    radius = ~ scales::rescale(mag, to = c(3, 14)),
    color = ~pal(rango_mag),
    stroke = FALSE, fillOpacity = 0.6,
    popup = ~paste0(
      "<b>", place, "</b><br>",
      "Fecha: ", fecha, "<br>",
      "Magnitud: ", mag, " (", magType, ")<br>",
      "Profundidad: ", depth, " km"
    )
  ) %>%
  addHeatmap(
    lng = ~longitude, lat = ~latitude, intensity = ~mag,
    blur = 20, max = 0.05, radius = 15, group = "Mapa de calor"
  ) %>%
  addLegend(
    "bottomright", pal = pal, values = ~rango_mag,
    title = "Rango de magnitud"
  )

El mapa muestra que la actividad sísmica se concentra principalmente en determinadas regiones del suroccidente del territorio colombiano (departamentos como Nariño, Cauca, Valle del Cauca y Chocó, en el marco de la subducción de la placa Nazca) y en el departamento de Santander,como se mostró anteriormente en el listado y no presenta una distribución uniforme.

Lectura del capítulo: la sismicidad colombiana se concentra principalmente a lo largo del suroccidente del país,en la zona del nido sísmico de Bucaramanga y en corredores de fallas activas del interior del país. Estas zonas concentran tanto el mayor número de eventos como los de mayor magnitud, por lo cual deberían considerarse prioritarias en la gestión del riesgo.


4 Capítulo 4: Conclusiones generales y recomendaciones

4.1 Síntesis: ¿por qué (aún) no se pueden predecir los sismos y qué los hace sistemáticos?

Uniendo la evidencia recolectada en los tres capítulos anteriores, se puede construir una respuesta razonada a la pregunta central de este trabajo.

El sismo de magnitud 7.4 que sacudió a Colombia el pasado 10 de agosto de 2026 fue un doloroso recordatorio de esta dualidad; ya que, por un lado, confirma lo que la geología y los datos estadísticos de largo plazo ya nos mostraban que la sismicidad en Colombia puede ser espacialmente predecible. Se concentra en estructuras bien identificadas y estables en el tiempo, como el Nido Sísmico de Bucaramanga o la zona de subducción del Pacífico. Y también sabemos que la acumulación de esfuerzo en las fallas por el movimiento constante de las placas tectónicas es continua y medible, por lo que sabemos que probablemente sucederá un sismo en algún momento cercano.

Sin embargo, a pesar de tener el conocimiento de lo anterior como sociedad aún tenemos la urgencia de saber ¿por qué la ciencia no pudo advertir el día ni la hora exacta? y de acuerdo a este análisis se puede decir que la respuesta radica en las limitaciones físicas y estadísticas del corto plazo, como se vio en el Capítulo 1 no existe una relación entre la magnitud y la profundidad así que no se puede estudiar por esa parte algún patrón. Luego en el Capítulo 2, ni la hora del día, ni el mes, ni el año muestran patrones fuertes o estadísticamente contundentes que permitan anticipar cuándo ocurrirá el próximo evento.

Esto nos lleva a concluir que el instante preciso y la magnitud exacta de un evento individual no son predecibles, porque dependen de un proceso de ruptura que es sensible a condiciones que no podemos observar ni medir con suficiente detalle. Por eso la gestión del riesgo sísmico no se basa en “predecir” el próximo sismo, sino en prepararse para el que tarde o temprano ocurrirá.

4.2 Conclusiones generales

resumen <- tibble(
  Indicador = c("Total de sismos analizados", "Periodo analizado",
                "Magnitud promedio", "Magnitud máxima registrada",
                "Profundidad promedio (km)", "Zona con mayor frecuencia"),
  Valor = c(
    n_total,
    paste(format(rango_fechas[1], "%Y"), "-", format(rango_fechas[2], "%Y")),
    round(mean(sismos$mag), 2),
    max(sismos$mag),
    round(mean(sismos$depth), 1),
    top_zonas$lugar_corto[1]
  )
)

kable(resumen, caption = "Resumen ejecutivo de indicadores clave") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Resumen ejecutivo de indicadores clave
Indicador Valor
Total de sismos analizados 668
Periodo analizado 2006 - 2026
Magnitud promedio 4.75
Magnitud máxima registrada 7.4
Profundidad promedio (km) 84.3
Zona con mayor frecuencia NW of Cepitá

A partir del análisis descriptivo desarrollado se concluye que:

  • La actividad sísmica en Colombia durante los últimos 20 años es frecuente y persistente, con predominio de eventos de magnitud ligera a moderada y ocurrencia ocasional de sismos fuertes o mayores.
  • En cuanto a profundidad, predominan los sismos de categoría Superficial (0-70 km), lo que indica que buena parte de la actividad está asociada a fuentes sismogénicas relativamente cercanas a la superficie o a la interacción de placas en el occidente del país.
  • Existen zonas geográficas concentradoras del riesgo, principalmente en el suroccidente del país y en focos de sismicidad intermedia/profunda, donde se agrupa un porcentaje significativo de los eventos registrados.
  • La ocurrencia de sismos leves y menores es frecuente (de días a pocas semanas entre eventos), mientras que los sismos fuertes o mayores son comparativamente poco frecuentes pero de mayor impacto potencial.
  • El año 2023 registró el mayor número de sismos dentro del período estudiado.

4.3 Recomendaciones para la toma de decisiones

Recomendaciones orientadas a la toma de decisiones
Área Recomendación
Ordenamiento territorial Priorizar estudios de microzonificación sísmica en los municipios identificados con mayor frecuencia de eventos, e incorporar esta información en los Planes de Ordenamiento Territorial (POT).
Infraestructura crítica Reforzar la evaluación de vulnerabilidad sísmica de hospitales, colegios, vías y redes de servicios públicos ubicados en las zonas de mayor concentración de sismicidad.
Sistemas de alerta y monitoreo Fortalecer la densidad de estaciones de la Red Sismológica Nacional en las zonas de mayor actividad para mejorar la precisión de localización y magnitud, especialmente de eventos de baja magnitud.
Gestión del riesgo y educación Diseñar campañas de preparación comunitaria y simulacros focalizados en las zonas de mayor recurrencia sísmica identificadas en este informe.
Investigación Profundizar el análisis con modelos de recurrencia (Gutenberg-Richter) y de peligro sísmico probabilístico que complementen esta descripción exploratoria.

5 Anexo: base de datos utilizada

sismos %>%
  select(fecha, time, lugar_corto, place, mag, rango_mag, depth, rango_prof,
         latitude, longitude) %>%
  arrange(desc(fecha)) %>%
  datatable(
    options = list(pageLength = 10, scrollX = TRUE),
    caption = "Catálogo sísmico depurado utilizado en el informe (Colombia, últimos 20 años)"
  )

Fuente de los datos: United States Geological Survey (USGS), catálogo sísmico consultado y proporcionado por el usuario (query.csv).

5.1 Referencias

•BBC News Mundo. (2024, 26 de agosto). Por qué hay tantos sismos en Colombia y en qué zonas es más probable que ocurra uno. BBC. https://www.bbc.com/mundo/articles/cre41wdd4qeo

•Instituto de Gestión del Riesgo y Cambio Climático [IDIGER]. (s. f.). Escenario de riesgo sísmico en Colombia. Alcaldía Mayor de Bogotá. https://www.idiger.gov.co/escenarios-de-riesgo/sismico/en-colombia

•Servicio Geológico Colombiano [SGC]. (2021). ¿Qué es el Nido Sísmico de Bucaramanga? Gobierno de Colombia. https://www2.sgc.gov.co/Noticias/Paginas/Que-es-el-Nido-Sismico-de-Bucaramanga.aspx

•U.S. Geological Survey [USGS]. (s. f.). Earthquake magnitude, energy release, and shaking intensity. U.S. Department of the Interior. https://www.usgs.gov/programs/earthquake-hazards/earthquake-magnitude-energy-release-and-shaking-intensity