Código
rm(list=ls())
# Librerías necesarias
require(ggplot2)
require(tidyverse)
require(ggfortify)
require(plotly)
require(kableExtra)
require(vroom)
require(leaflet)
require(lubridate)
require(devtools)
options(scipen=999)
Presentamos un ejemplo para visualización de datos de sismos de Argentina de los últimos 10 años.
Se llama sismo al proceso físico de liberación instantánea de energía acumulada en el interior de las rocas de la litósfera. La energía acumulada es producto de los esfuerzos tectónicos generados en las partes rígidas de la Tierra. Los sismos ocurren y han ocurrido históricamente, sin embargo, en la actualidad hay más registro de eventos sísmicos a causa de los avances tecnológicos que han permitido localizarlos y caracterizarlos con mayor exactitud.
El riesgo sísmico de una región es la probabilidad de consecuencias adversas ante un evento sísmico y resulta de la combinación entre la peligrosidad sísmica propia del lugar y de la vulnerabilidad de las construcciones.
El INPRES (Instituto Nacional para la Prevención Sísmica) afirma que no es posible, en el sentido amplio de la palarba, predecir un sismo (o terremoto, que en la jerga local alude a un sismo que ocasiona víctimas y daños severos). Se considera una predicción sísmica formal a aquella en la que se indica la fecha de ocurrencia, el lugar (coordenadas) de ocurrencia (con la profundidad) y el tamaño (magnitud), del evento por ocurrir. La sismología ha permitido conocer e identificar todas las regiones en el mundo que son potencialmente sísmicas, es decir, regiones donde siempre han ocurrido, ocurren y ocurrirán terremotos mientras la Tierra tenga vida. Aunque el tamaño de los terremotos que ocurrirán en alguna de estas regiones puede ser estimado de manera aproximada en función de datos históricos, sin embargo, la fecha del terremoto no puede ser determinada con exactitud.
Si bien hay estudios científicos sobre predicción sísmica que realizan países como China, Estados Unidos y Japón; la comunidad sismológica mundial en la actualidad, no ha logrado obtener, con rigor científico estricto, predicciones de terremotos.
A continuación, se muestran algunos posibles análisis para datos de sismos de Argentina durante los años 2012 a 2022, fuertemente relacionados con herramientas de visualización y descriptivas.
rm(list=ls())
# Librerías necesarias
require(ggplot2)
require(tidyverse)
require(ggfortify)
require(plotly)
require(kableExtra)
require(vroom)
require(leaflet)
require(lubridate)
require(devtools)
options(scipen=999)
Los datos de sismos pueden obtenerse del buscador disponible en el INPRES, acá, en el que se registran eventos sísmicos en territorio argentino y diferentes variables asociadas a estos, en particular, si se trata de un sismo que se haya sentido o no.
Para lo que sigue, trabajamos con el dataset reducido sismos
de la librería datosIC
en el que se incluyen datos de sismos de diferente intensidad y magnitud en la región continental del país (excluyendo Tierra del Fuego) desde el 7 de enero de 2012, hasta el 18 de mayo de 2022. El dataset ha sido transformado a partir de datos scrappeados del buscador de sismos del INPRES, cortesía de Gustavo Juantorena. A continuación, se muestran 10 datos de dicho conjunto.
::install_github("daniellaparada/datosIC")
devtoolslibrary(datosIC)
<- sismos datos
Fecha | Hora | Latitud | Longitud | Provincia | Percibido | Magnitud | Profundidad |
---|---|---|---|---|---|---|---|
2022-05-18 | 13:09:56 | -31.820 | -67.040 | San Juan | FALSE | 3.0 | 134 |
2022-05-18 | 10:18:34 | -24.216 | -67.139 | Salta | FALSE | 3.2 | 185 |
2022-05-18 | 09:40:09 | -31.262 | -68.708 | San Juan | FALSE | 3.3 | 104 |
2022-05-18 | 09:25:43 | -32.521 | -70.085 | San Juan | FALSE | 2.7 | 112 |
2022-05-18 | 08:45:59 | -28.192 | -67.376 | Catamarca | FALSE | 2.7 | 142 |
2022-05-18 | 08:42:33 | -32.043 | -70.030 | San Juan | FALSE | 2.7 | 114 |
2022-05-17 | 23:22:48 | -23.442 | -66.846 | Jujuy | FALSE | 3.6 | 210 |
2022-05-17 | 21:21:18 | -23.503 | -66.831 | Jujuy | FALSE | 3.6 | 210 |
2022-05-17 | 17:17:58 | -22.794 | -66.228 | Jujuy | FALSE | 4.0 | 273 |
2022-05-17 | 14:46:04 | -31.505 | -68.640 | San Juan | FALSE | 2.7 | 103 |
La variable ´Percibido´ es la que registra si la intensidad del sismo fue percibida, o no, por la población del territorio afectado. Los sismos son más frecuentes de lo que, quizás, supongamos. El siguiente mapa ofrece una posible visualización para los sismos percibidos y no percibidos de los últimos 10 años. Dentro del mapa, es posible activar la capa topográfica para relacionar, por ejemplo, los sismos con el relieve del territorio.
<- datos
sismos_arg <-
pal1 colorNumeric(palette = c("deeppink2", "deeppink4"),
domain = sismos_arg$Profundidad)
<-
pal2 colorNumeric(palette = c("dodgerblue2", "dodgerblue4"),
domain = sismos_arg$Profundidad)
<- sismos_arg %>%
mapa_arg leaflet(options = leafletOptions(attributionControl = FALSE)) %>%
addTiles(group = "OSM (default)") %>%
addProviderTiles("OpenTopoMap",
group = "Topográfico",
options = providerTileOptions(opacity = 0.5)) %>%
addCircleMarkers(
data = sismos_arg %>%
filter(Percibido == FALSE),
lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 0.15,
radius = ~ Magnitud,
color = ~ pal2(Profundidad),
stroke = FALSE,
group = "Sismos no percibidos"
%>%
) addCircleMarkers(
data = sismos_arg %>%
filter(Percibido == TRUE),
lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 0.15,
radius = ~ Magnitud,
color = ~ pal1(Profundidad),
stroke = FALSE,
group = "Sismos percibidos"
%>%
) addLayersControl(
baseGroups = c("OSM (default)", "Topográfico"),
overlayGroups = c("Sismos no percibidos", "Sismos percibidos"),
options = layersControlOptions(collapsed = TRUE)
)
mapa_arg
El radio de cada punto indica la magnitud del sismo, mientras que la intensidad del color, su profundidad. Los sismos también se clasifican de acuerdo con la profundidad de su foco: desde la corteza terreste y hasta 70 km de profundidad, son superficiales; entre los 70 y los 450 km de profundidad, son intermedios; y para más de 450 km profundidad, profundos. Los más profundos, en el mapa, se ubican en la capa de sismos no percibidos (azul) sobre la falla que recorre en línea más o menos vertical las provincias de Salta y Santiago del Estero. Profundidades intermedias se encuentran, mayoritariamente, en el oeste de Jujuy. El resto, en general, corresponde a profundidades superficiales.
Las provincias de San Juan, Salta, Jujuy, La Rioja, Mendoza, Catamarca, y Córdoba son aquellas que registran más de 1000 eventos durante el período observado. El siguiente mapa ofrece una visualización de sismos para dichas provincias, indicando con color su magnitud.
<-
top c("San Juan",
"Salta",
"Jujuy",
"La Rioja",
"Mendoza",
"Catamarca",
"Córdoba")
<-
pal3 colorNumeric(
palette = c("gold", "sienna1", "firebrick", "darkred", "orangered4"),
domain = sismos_arg$Magnitud
)
<- sismos_arg %>%
mapa_arg_top leaflet(options = leafletOptions(attributionControl = FALSE)) %>%
addTiles(group = "OSM (default)") %>%
addProviderTiles("OpenTopoMap",
group = "Topográfico",
options = providerTileOptions(opacity = 0.5)) %>%
addCircles(
data = sismos_arg %>%
filter(Provincia == top[1]),
lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[1]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[2]),
lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[2]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[3]),
lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[3]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[4]),
lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[4]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[5]),
lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[5]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[6]),
lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[6]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[7]),
lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[7]
%>%
) addLayersControl(
baseGroups = c("OSM (default)", "Topográfico"),
overlayGroups = top,
options = layersControlOptions(collapsed = TRUE)
) mapa_arg_top
La percepción del sismo por parte de la población no está únicamente asociada a la magnitud y/o profundidad. Por ejemplo, un sismo de magnitud 2.6 y profundidad de 7 km en Córdoba es percibido, mientras que otro, de magnitud 2.7 y profundidad de 12 km en Catamarca no es percibido. Lo mismo ocurre para magnitudes y/o profundidades mayores. El siguiente mapa ofrece una visualización similar al anterior, pero restringido únicamente a los sismos percibidos del conjunto de datos.
<- sismos_arg %>%
mapa_arg_top_perc leaflet(options = leafletOptions(attributionControl = FALSE)) %>%
addTiles(group = "OSM (default)") %>%
addProviderTiles("OpenTopoMap",
group = "Topográfico",
options = providerTileOptions(opacity = 0.5)) %>%
addCircles(
data = sismos_arg %>%
filter(Provincia == top[1],
== TRUE),
Percibido lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[1]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[2],
== TRUE),
Percibido lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[2]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[3],
== TRUE),
Percibido lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[3]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[4],
== TRUE),
Percibido lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[4]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[5],
== TRUE),
Percibido lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[5]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[6],
== TRUE),
Percibido lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[6]
%>%
) addCircles(
data = sismos_arg %>%
filter(Provincia == top[7],
== TRUE),
Percibido lng = ~ Longitud,
lat = ~ Latitud,
fillOpacity = 1,
color = ~ pal3(Magnitud),
stroke = FALSE,
group = top[7]
%>%
) addLayersControl(
baseGroups = c("OSM (default)", "Topográfico"),
overlayGroups = top,
options = layersControlOptions(collapsed = TRUE)
) mapa_arg_top_perc
Allí puede verse que, mientras que en San Juan los sismos percibidos parecen ser de magnitudes altas, en Córdoba ocurre lo contrario.
Por otro lado, la profundidad de los sismos guarda estrecha relación con la configuración geológica y tecnótica de su ubicación geográfica. El gráfico que sigue toma los eventos de las provincias con más registros y exhibe la relación entre la profundidad del sismo y los paralelos de su ubicación de registro. Llamativo resulta ver que la actividad sísmica disminuye en las profundidades que separan los sismos superficiales de los intermedios. Como veíamos, las mayores profundidades se detectan en las provincias de Salta y Jujuy, con la excepción de una pequeña región entre paralelos en San Juan.
ggplotly(
ggplot(
data = sismos_arg %>%
filter(Provincia == top),
aes(
x = Latitud,
y = Profundidad,
colour = Provincia,
key = Magnitud
)+
) labs(x = "Latitud", y = "Profundidad") +
geom_point() +
theme_classic(),
source = "select",
tooltip = c("key")
)
Conocimiento sobre la configuración tectónica permite interpretaciones más profundas. Por ejemplo, la zona norte de Mendoza ubicada entre los paralelos -32.5 y -33.5 y donde se ubica parte del Gran Mendoza, se encuentra en la región de mayor peligrosidad sísmica según INPRES. Lo que ocurre es que allí se da la convergencia entre la placa Sudamericana y la placa de Nazca, que se extiende a lo largo de la fosa Peruano-Chilena y en su movimiento en la dirección Este, subduce debajo de la Sudamericana, que se mueve en sentido opuesto. Dicho mecanismo induce un régimen de esfuerzos compresionales a la placa Sudamericana y que resultan responsables de la orientación y sentido del desplazamiento de las fallas lo que, como consecuencia, caracteriza la sismicidad de la zona.
El siguiente gráfico muestra la profundidad en relación con la longitud de la ubicación del foco para la zona norte de Mendoza ubicada entre los paralelos -32.5° y -33.5°, zona de subducción entre la placa de Nazca y la Sudamericana (zona de Benioff). Un análisis experto puede halar en el gráfico evidencia de la placa de Nazca subducida y moviéndose en dirección Este respecto a la placa Sudamericana (más detalle sobre esto puede consultarse acá).
ggplotly(
ggplot(
data = sismos_arg %>%
filter(Provincia == "Mendoza",
< -32.5,
Latitud > -33.5),
Latitud aes(
x = Longitud,
y = Profundidad,
colour = Magnitud,
key = Profundidad
)+
) labs(x = "Longitud (entre latitudes -32,50º y -33,50º)", y = "Profundidad") +
geom_point() +
theme_classic(),
source = "select",
tooltip = c("key")
)
La tabla que sigue resume, por provincia, la cantidad de sismos registrados, los percibidos, así como la magnitud y profundidad mediana. De las provincias con mayor cantidad de eventos registrados, Jujuy y Salta registran los sismos más profundos, mientras que Córdoba registra sismos superficiales, con una intensidad mediana de 2.8, y es de las provincias con mayor tasa de sismos percibidos de entre las de mayor cantidad de eventos registrados. San Juan registra muchos sismos, más de la mitad de ellos de profundidad media a profunda, pero con una tasa de percepción relativamente baja, como Salta y Jujuy.
Provincia | n | nperc | Magmed | Profmed |
---|---|---|---|---|
Buenos Aires | 7 | 5 | 3.7 | 31 |
Catamarca | 3317 | 109 | 2.8 | 139 |
Chaco | 3 | 0 | 3.3 | 231 |
Chubut | 1 | 0 | 3.8 | 169 |
Corrientes | 2 | 0 | 3.7 | 267 |
Córdoba | 1145 | 313 | 2.8 | 21 |
Entre Ríos | 1 | 0 | 3.8 | 32 |
Formosa | 3 | 0 | 3.8 | 342 |
Jujuy | 5270 | 64 | 3.2 | 223 |
La Pampa | 5 | 4 | 3.6 | 22 |
La Rioja | 4616 | 166 | 2.8 | 114 |
Mendoza | 4319 | 303 | 2.7 | 31 |
Neuquén | 231 | 66 | 3.0 | 8 |
Río Negro | 1 | 0 | 2.9 | 98 |
Salta | 5781 | 61 | 3.2 | 195 |
San Juan | 29920 | 619 | 2.7 | 106 |
San Luis | 568 | 69 | 2.8 | 22 |
Santa Cruz | 46 | 22 | 3.0 | 14 |
Santiago del Estero | 255 | 59 | 3.2 | 30 |
Tucumán | 326 | 46 | 2.8 | 27 |
Provincia | pperc |
---|---|
Catamarca | 3.286102 |
Córdoba | 27.336244 |
Jujuy | 1.214421 |
La Rioja | 3.596187 |
Mendoza | 7.015513 |
Salta | 1.055181 |
San Juan | 2.068850 |
San Juan registra casi 30.000 eventos para el período considerado de poco más de 10 años, con una mediana de 8 sismos diarios. Un histograma para la cantidad diaria de sismos se observa a continuación.
<- sismos_arg %>%
sismos_arg mutate(FechaHora = paste(Fecha, Hora, sep = " "))
$FechaHora <- ymd_hms(sismos_arg$FechaHora)
sismos_arg
<- sismos_arg %>%
sismos_SJ filter(Provincia == "San Juan") %>%
arrange(FechaHora)
<- sismos_SJ %>%
sismos_SJ_dia group_by(Fecha) %>%
count()
ggplotly(
ggplot(data = sismos_SJ_dia, aes(x = n, key = n)) +
labs(x = "Cantidad de sismos por día",
y = "") +
geom_histogram(fill = "dodgerblue", alpha = 0.9) +
theme_classic(),
source = "select",
tooltip = c("key")
)
En el histograma puede verse que hay por lo menos una observación que supera los 100 sismos diarios. En efecto, se trata del terremoto del 18 de enero de 2021 en La Rinconada, San Juan, en el que se reportaron colapsos de viviendas de adobe, grietas distensivas a lo largo del eje de la Ruta Nacional 40, derrumbes parciales, y otros daños serios principalmente en los Departamentos de Pocito y Sarmiento. Durante las 72 hs posteriores al terremoto de magnitud 6.4, se registraron más de 150 réplicas de magnitudes entre 2.5 y 5.3. Más información acá.
El siguiente gráfico muestra la cantidad de sismos diarios. Puede apreciarse las réplicas de tal terremoto en las observaciones que corresponden a los días entre el 19 y el 23 de enero de 2021.
ggplotly(
ggplot(data = sismos_SJ_dia, aes(
x = Fecha, y = n, key = Fecha
+
)) labs(x = "Fecha (días)", y = "Cantidad de sismos (día)") +
geom_point(colour = "deeppink3") +
theme_classic(),
source = "select",
tooltip = c("key")
)
Como vimos, San Juan registra más de 600 sismos percibidos durante el período, algo más que el 2% del total de sismos registrados. La frecuencia con la que se perciben tales sismos es alta. Eso puede observarse en el histograma para la cantidad de días transcurridos entre un sismo percibido y otro.
<- sismos_SJ %>%
df filter(Percibido == TRUE)
# Tiempo transcurrido entre dos percibidos (días)
<- c()
tiempo for (i in 1:(nrow(df) - 1))
<-
tiempo[i] difftime(df$FechaHora[i + 1], df$FechaHora[i], units = "days")
<- data.frame(tiempo)
datos ggplotly(
ggplot(data = datos, aes(x = tiempo, key = tiempo)) +
labs(x = "Días transcurridos entre un sismo percibido y otro",
y = "Cantidad") +
geom_histogram(fill = "dodgerblue", alpha = 0.9) +
theme_classic(),
source = "select",
tooltip = c("key")
)
Córdoba y Mendoza, registrando cerca del 27% y 7% de sismos percibidos respecto del total, respectivamente, tienen una frecuencia ligeramente más espaciada que la de San Juan.
<- sismos_arg %>%
sismos_COR filter(Provincia == "Córdoba") %>%
arrange(FechaHora)
<- sismos_COR %>%
df filter(Percibido == TRUE)
# Tiempo transcurrido entre dos percibidos (días)
<- c()
tiempo for (i in 1:(nrow(df) - 1))
<-
tiempo[i] difftime(df$FechaHora[i + 1], df$FechaHora[i], units = "days")
<- data.frame(tiempo)
datos ggplotly(
ggplot(data = datos, aes(x = tiempo, key = tiempo)) +
labs(x = "Días transcurridos entre un sismo percibido y otro (Córdoba, n=313)",
y = "Cantidad") +
geom_histogram(fill = "dodgerblue3", alpha = 0.9) +
theme_classic(),
source = "select",
tooltip = c("key")
)
<- sismos_arg %>%
sismos_MZ filter(Provincia == "Mendoza") %>%
arrange(FechaHora)
<- sismos_MZ %>%
df filter(Percibido == TRUE)
# Tiempo transcurrido entre dos percibidos (días)
<- c()
tiempo for (i in 1:(nrow(df) - 1))
<-
tiempo[i] difftime(df$FechaHora[i + 1], df$FechaHora[i], units = "days")
<- data.frame(tiempo)
datos ggplotly(
ggplot(data = datos, aes(x = tiempo, key = tiempo)) +
labs(x = "Días transcurridos entre un sismo percibido y otro (Mendoza, n=303)",
y = "Cantidad") +
geom_histogram(fill = "dodgerblue4", alpha = 0.9) +
theme_classic(),
source = "select",
tooltip = c("key")
)
La ley de Gutenberg-Richter es una fórmula que permite cuantificar la relación entre la frecuencia y la magnitud de la actividad sísmica de una región. La relación fue inicialmente propuesta por Charles Francis Richter y Beno Gutenberg hace más de 70 años y es aun objeto de caracterización de sismos, pues se ha mostrado relativamente invariante por región y en el tiempo.
N es un número de sismos de magnitud mayor que M durante un período de tiempo “t”, logN es un logaritmo del número de sismos con magnitud M La ley establece que la recurrencia sísmica de magnitud mayor o igual a \(M\) durante un período de tiempo \(t\), en una región, se relaciona con la cantidad de sismos, \(N\), de magnitud mayor que \(M\) durante el período, a través de
\[ \log _{10} N=a-b M, \]
donde \(a\) y \(b\) son constantes determinadas por la naturaleza sísmica de la región, en general, a partir de datos históricos.
Ajustamos los datos de San Juan al modelo de Gutenberg-Richter para estimar las constantes \(a\) y \(b\). En el siguiente gráfico puede verse la cantidad \(N\) de sismos de magnitud mayor que \(M\) por año (escala logarítmica en base 10). Como los años 2012 y 2022 no están completos para el año calendario, reducimos los datos al período 2013-2021.
<- sismos_SJ %>%
sismos_SJ mutate(Año = format(Fecha, format = "%Y"))
<- sismos_SJ %>%
df filter(Año > 2012,
< 2022) %>%
Año group_by(Año, Magnitud) %>%
summarize(n = n())
<- df %>%
df2 group_by(Año) %>%
arrange(-Magnitud) %>%
summarize(Magnitud = Magnitud,
nacum = cumsum(n))
ggplotly(
ggplot(data = df2, aes(
x = Magnitud, y = log(nacum, 10), colour = Año, key = nacum
+
)) labs(x = "Magnitud", y = "(Log 10) Cantidad acumulada de sismos") +
geom_point() +
theme_classic(),
source = "select",
tooltip = c("key")
)
La estimación por mínimos cuadrados de \(a\) y de \(b\) puede verse a continuación.
<- lm(log(nacum, 10) ~ Magnitud, data = df2)
ajuste <- round(ajuste$coefficients[1], 4)
a <- -round(ajuste$coefficients[2], 4) b
Los coeficientes estimados son \(6.1812\) para \(a\), y \(1.1433\) para \(b\). El coeficiente \(b\) suele ser aproximadamente igual a \(1\) para sismos tectónicos. Como los datos con los que se estimó son de frecuencia anual, la cantidad \(a/b\) puede interpretarse como, en promedio y una vez al año, la ocurrencia de un terremoto de magnitud \(a/b\) o superior. En este caso, \(a/b=5.4065\), lo que sugiere que, en promedio, una vez al año se registra en San Juan un terremoto de magnitud aproximada \(5.4\) o superior.
En el siguiente gráfico se superpone, en azul, la curva estimada de Gutenberg-Richter
\[ \log _{10} N=6.1812-1.1433 M, \]
a partir de los datos de San Juan.
ggplotly(
ggplot(data = df2, aes(
x = Magnitud,
y = log(nacum, 10),
key = Año
+
)) labs(x = "Magnitud", y = "(Log 10) Cantidad de sismos") +
geom_point(colour = "deeppink3") +
geom_abline(
intercept = a,
slope = -b,
colour = "dodgerblue"
+
) theme_classic(),
source = "select",
tooltip = c("key")
)
Del análisis de los resultados de la tasa o frecuencia media de ocurrencia por unidad de tiempo, suele derivarse la estimación de la probabilidad de ocurrencia de futuros eventos sísmicos en la región estudiada, bajo el supuesto fundamental de que el nivel de actividad sísmica de los últimos años se mantendrá aproximadamente igual, en promedio, para los próximos años.
Para evaluar dicho riesgo sísmico, se modela la probabilidad con una distribución de Poisson, pues se supone que los eventos sísmicos se producen de un modo aleatorio e independiente, donde los tiempos de origen, las coordenadas de los focos y las magnitudes son variables independientes entre sí. Es decir, que la ocurrencia de un evento sísmico no tiene influencia en la ocurrencia de otro, y que la probabilidad de que dos eventos sucedan en el mismo sitio y al mismo tiempo es casi nula.
En general, tales hipótesis no concuerdan completamente con la naturaleza física de la acumulación de energía en zonas sísmicas. Sin embargo, y a pesar de estas limitaciones, este modelo provee una medida del riesgo sísmico relativamente sencilla, interpretable y típicamente usada por la comunidad experta para proveer una cuantificación de riesgo aceptable para las regiones.
Entonces, bajo este modelo, la probabilidad de ocurrencia de al menos un sismo de magnitud mayor que \(M\) en los próximos \(t\) años se calcula como \[ P(t)=1-e^{-N_1(M) \times t} . \] donde \(N_1(M)=10^{(a-b M \log t)}\). Luego, el número promedio de años para que un sismo de magnitud mayor que \(M\) ocurra está dado por \[ T_R=\frac{1}{N_1(M)}. \] Tomando como referencia la estimación de \(a\) y \(b\) obtenida para San Juan, la estimación de la probabilidad de ocurrencia de al menos un sismo de magnitud mayor que \(M\) en San Juan en los próximos \(t\) años, para \(t\in\{1,5,10,20\}\), se observa en el siguiente gráfico.
<- seq(3, 6.5, by = 0.01)
magnitudes <- c(1, 5, 10, 20)
tiempos
<- 10 ^ (a - b * magnitudes - log(1, 10))
N1_m <- function(t, N1m) {
p_m 1 - exp(-N1m * t)
}
<- matrix(c(
probas
magnitudes,p_m(1, N1_m),
p_m(5, N1_m),
p_m(10, N1_m),
p_m(100, N1_m)
ncol = 5)
),
colnames(probas) <- c("Magnitud", "t_1", "t_5", "t_10", "t_20")
<- data.frame(probas)
probas
ggplotly(
ggplot() +
labs(x = "Magnitud", y = "Probabilidad estimada") +
geom_line(data = probas, aes(
x = Magnitud, y = t_1, color = "t=1"
+
)) geom_line(data = probas, aes(
x = Magnitud, y = t_5, color = "t=5"
+
)) geom_line(data = probas, aes(
x = Magnitud, y = t_10, color = "t=10"
+
)) geom_line(data = probas, aes(
x = Magnitud, y = t_20, color = "t=20"
+
)) scale_colour_manual(
name = 'Tiempos',
values = c(
't=1' = 'gold',
't=5' = 'sienna1',
"t=10" = "firebrick3",
"t=20" = "darkred"
),labels = c('t=1', 't=5', 't=10', 't=20')
+
) theme_classic(),
source = "select"
)
Así, por ejemplo, la probabilidad estimada de que un sismo de magnitud superior a 6 ocurra en San Juan ocurra en los próximos 5 años es de casi \(0.65\), aumenta a \(0.88\) para los próximos 10 años y es de casi \(1\) para los próximos 20. En efecto, los únicos sismos registrados en los datos de tal magnitud son los de noviembre de 2016 y enero de 2021. Sismos de magnitud superior a 4.5 en San Juan son casi seguros para los próximos años, en todos los casos.
Fecha | Hora | Latitud | Longitud | Provincia | Percibido | Magnitud | Profundidad | FechaHora | Año |
---|---|---|---|---|---|---|---|---|---|
2016-11-20 | 17:57:44 | -31.630 | -68.663 | San Juan | TRUE | 6.3 | 107 | 2016-11-20 17:57:44 | 2016 |
2021-01-18 | 23:46:20 | -31.854 | -68.963 | San Juan | TRUE | 6.4 | 8 | 2021-01-18 23:46:20 | 2021 |
A continuación, se detallan aspectos de los datasets que conformaron el dataset reducido para el desarrollo del ejemplo, a la vez que se incluyen las fuentes de los datos y el código utilizado para pre-procesarlo con la sintaxis de tidyverse
. De esta forma, puede fácilmente replicarse y/o adaptarse si así se lo desea.
El dataset reducido con el que se desarrolló el ejemplo y que surge de tal pre-procesamiento, es sismos
de la librería datosIC
.
Los datos de este ejemplo corresponden a datos scrappeados del buscador de sismos del INPRES, cuyo buscador está disponible acá. En el dataset sismos_all.csv
, disponible acá, en el que se registran eventos sísmicos en territorio argentino y diferentes variables asociadas a estos, en particular, si se trata de un sismo que se haya sentido o no.
Los sismos registrados en INPRES pueden estar revisados por un sismólogo y, posiblemente a razón de ello, algunas inconsistencias en la nomenclatura de las provincias es hallada. El siguiente código toma el dataset completo sismos_all.csv
y:
# importo datos de sismos
<- vroom("./fuente/04_visualizacion/sismos_all.csv")
sismos $Fecha <- as.Date(sismos$Fecha, tryFormats = c("%d/%m/%Y"))
sismos
# info de casi 10 años
min(sismos$Fecha)
max(sismos$Fecha)
# dummy para los percibidos
<- sismos %>%
sismos mutate(
Percibido = !is.na(Intensidad),
Magnitud = Magn.,
Profundidad = Profund.
)
# quito las unidades km. en intensidad
$Profundidad <- as.numeric(str_sub(sismos$Profundidad, 1,-4))
sismos
# sismos en Argentina Continental (saco TdF porque se corre mucho el mapa)
<- sismos %>%
sismos_arg filter(
!= "OCEANO PACIFICO",
Provincia != "CHILE",
Provincia != "MAULE - CHILE",
Provincia != "REPÚBLICA DE CHILE",
Provincia != "REPUBLICA DE CHILE",
Provincia != "SUR DE CHILE",
Provincia != "TFAIAS",
Provincia != "NORTH ISLAND, NEW ZEALAND",
Provincia != "REGION NOT FOUND.",
Provincia != "PERU",
Provincia != "PENINSULA ANTARTICA",
Provincia != "PASAJE DE DRAKE",
Provincia != "NORTHWEST OF KURIL ISLANDS",
Provincia != "NTARTIDA",
Provincia != "MAR DE SCOTIA",
Provincia != "MAR ARGENTINO",
Provincia != "ISLAS SANDWICH DEL SUR",
Provincia != "ISLAS SANDWICH",
Provincia != "ISLAS SHETLAND",
Provincia != "ISLAS SHETLAND DEL SUR",
Provincia != "ESTRECHO DE DRAKE",
Provincia != "FILIPINAS",
Provincia != "I.SANDWICH DEL SUR",
Provincia != "SECTOR ANTARTICO",
Provincia != "IS. SHETLAND DEL SUR",
Provincia != "ISLAS GEORGIA DEL SUR",
Provincia != "ISLAS GEORGIAS DEL SUR",
Provincia != "ISLAS GEORGIAS y SANDWICH DEL SUR",
Provincia != "ISLAS GIORGIA Y SANDWICH DEL SUR",
Provincia != "ISLAS ORCADAS",
Provincia != "ISLAS ORCADAS DEL SUR",
Provincia != "ATLANTICO SUR",
Provincia != "BOLIVIA",
Provincia != "PARAGUAY",
Provincia != "LIM. ARG-CHILE",
Provincia != "LIM.ARGENTINA-CHILE",
Provincia != "LIM.CHILE-ARGENTINA",
Provincia != "LIMITE ARGENTINA-CHILE",
Provincia != "LIMITE ARGENTINA CHILE",
Provincia != "TIERRA DEL FUEGO",
Provincia != "ISLAS GEORGIAS Y SANDWICH DEL SUR"
Provincia
)
table(sismos_arg$Provincia)
# recodifico provincias
<- sismos_arg %>%
sismos_arg mutate(
Provincia = recode(
Provincia,"BUENOS AIRES" = "Buenos Aires",
"CATAMARCA" = "Catamarca",
"CATAMARCA}" = "Catamarca",
"CATAMARCA LIM. TUCUMAN" = "Catamarca",
"CATAMARCA(LIM.CON TUCUMAN)" = "Catamarca",
"CATAMARCA(LIM.CON TUCUMÁN)" = "Catamarca",
"CHACO" = "Chaco",
"CHUBUT" = "Chubut",
"CORDOBA" = "Córdoba",
"CORDOBA(LIM.CON SAN LUIS)" = "Córdoba",
"CORDOBA LIM. SAN LUIS" = "Córdoba",
"CORRIENTES" = "Corrientes",
"ENTRE RIOS" = "Entre Ríos",
"FORMOSA" = "Formosa",
"jujuy" = "Jujuy",
"JUJUY" = "Jujuy",
"JUJUY(LIM.CON SALTA)" = "Jujuy",
"LA PAMPA" = "La Pampa",
"LA RIOJA" = "La Rioja",
"LA RIOJA LIM. SAN JUAN" = "La Rioja",
"LA RIOJA(LIM.CON CATAMARCA)" = "La Rioja",
"LA RIOJA(LIM.CON SAN JUAN)" = "La Rioja",
"LIM. CATAMARCA-TUCUMAN" = "Catamarca",
"LIM. LA RIOJA - SAN JUAN" = "La Rioja",
"LIMITE CATAMARCA - TUCUMAN" = "Catamarca",
"LIMITE CORDOBA - SAN LUIS" = "Córdoba",
"LIMITE JUJUY-SALTA" = "Jujuy",
"LIMITE JUJUY - SALTA" = "Jujuy",
"LIMITE LA RIOJA-CATAMARCA" = "La Rioja",
"LIMITE MENDOZA-SAN JUAN" = "Mendoza",
"LIMITE MENDOZA - SAN JUAN" = "Mendoza",
"LIMITE SALTA-JUJUY" = "Salta",
"LIMITE SALTA - CATAMARCA" = "Salta",
"LIMITE SALTA - JUJUY" = "Salta",
"LIMITE SAN JUAN-MENDOZA" = "San Juan",
"LIMITE SAN JUAN - LA RIOJA" = "San Juan",
"LIMITE SAN JUAN - MENDOZA" = "San Juan",
"LIMITE SAN JUAN SAN LUIS" = "San Juan",
"LIMITE SAN LUIS-SAN JUAN" = "San Luis",
"LIMITE TUCUMAN - CATAMARCA" = "Tucumán",
"MENDOZa" = "Mendoza",
"MENDOZA" = "Mendoza",
"MENDOZA(LIM.CON SAN JUAN)" = "Mendoza",
"MENDOZA}" = "Mendoza",
"MMENDOZA" = "Mendoza",
"NEUQUEN" = "Neuquén",
"RIO NEGRO" = "Río Negro",
"SALTA" = "Salta",
"SALTA (limite con Jujuy)" = "Salta",
"SALTA LIM. JUJUY" = "Salta",
"SALTA(LIM.CON JUJUY)" = "Salta",
"SALTA(LIM.CON TUCUMAN)" = "Salta",
"SAN JUAN LIM. MENDOZA" = "San Juan",
"SAN JUAN (LIM.CON SAN LUIS)" = "San Juan",
"SAN JUAN LIM. LA RIOJA" = "San Juan",
"SAN JUAN LIM.CON SAN LUIS" = "San Juan",
"SAN JUAN LIM.CON MENDOZA" = "San Juan",
"SAN JUAN LIM. MENDOZA" = "San Juan",
"SAN JUAN(LIM.ARG-CHI)" = "San Juan",
"SAN JUAN(LIM.CON LA RIOJA)" = "San Juan",
"LIMITE SAN JUAN - SAN LUIS" = "San Juan",
"LIMITE SAN JUAN LA RIOJA" = "San Juan",
"SAN JUAN(LIM.CON MENDOZA)" = "San Juan",
"SAN JUA" = "San Juan",
"SAn JUAN" = "San Juan",
"SAN JUAN" = "San Juan",
"LIMITE SAN JUAN MENDOZA" = "San Juan",
"SAN JUAN(LIM.CON SAN LUIS)" = "San Juan",
"SAN LUIS" = "San Luis",
"SANTA CRUZ" = "Santa Cruz",
"SANTIAGO DEL ESTERO" = "Santiago del Estero",
"SGO.DEL ESTERO LIM.CON CATAMARCA" = "Santiago del Estero",
"TUCUMAN" = "Tucumán",
"TUCUMÁN" = "Tucumán",
"TUCUMAN LIM. SALTA" = "Tucumán",
"TUCUMAN(LIM.CON CATAMARCA)" = "Tucumán"
)
)
sort(-table(sismos_arg$Provincia))
# Elijo variables
<- sismos_arg %>%
sismos_arg select(c(2, 3, 4, 5, 9, 10, 11, 12))
sismos
Para limpiar y reducir los datos al estudio de interés, se crea un dataset reducido, sismos
, a partir de los datos scrappeados del buscador del INPRES. Se incluyen datos de sismos de diferente intensidad y magnitud en la región continental del país (excluyendo Tierra del Fuego) desde el 7 de enero de 2012, hasta el 18 de mayo de 2022, y se dispone de las siguientes variables.
Fecha
: fecha del evento sísmico, en el formato año-mes-día.Hora
: hora del evento sísmico, en el formato hora-minuto-segundo.Latitud
: latitud del evento registrado.Longitud
: longitud del evento registrado.Provincia
: nombre de la provincia del evento registrado.Percibido
: TRUE
si la magnitud fue percibida, FALSE
si no lo fue.Magnitud
: magnitud del sismo en la escala de Richter.Profundidad
: profundidad (km) registrada del sismo.El dataset sismos
está disponible en la librería datosIC
.
library(datosIC)
data(sismos)
Fecha | Hora | Latitud | Longitud | Provincia | Percibido | Magnitud | Profundidad |
---|---|---|---|---|---|---|---|
2022-05-18 | 13:09:56 | -31.820 | -67.040 | San Juan | FALSE | 3.0 | 134 |
2022-05-18 | 10:18:34 | -24.216 | -67.139 | Salta | FALSE | 3.2 | 185 |
2022-05-18 | 09:40:09 | -31.262 | -68.708 | San Juan | FALSE | 3.3 | 104 |
2022-05-18 | 09:25:43 | -32.521 | -70.085 | San Juan | FALSE | 2.7 | 112 |
2022-05-18 | 08:45:59 | -28.192 | -67.376 | Catamarca | FALSE | 2.7 | 142 |
2022-05-18 | 08:42:33 | -32.043 | -70.030 | San Juan | FALSE | 2.7 | 114 |
2022-05-17 | 23:22:48 | -23.442 | -66.846 | Jujuy | FALSE | 3.6 | 210 |
2022-05-17 | 21:21:18 | -23.503 | -66.831 | Jujuy | FALSE | 3.6 | 210 |
2022-05-17 | 17:17:58 | -22.794 | -66.228 | Jujuy | FALSE | 4.0 | 273 |
2022-05-17 | 14:46:04 | -31.505 | -68.640 | San Juan | FALSE | 2.7 | 103 |
sessionInfo()
R version 4.2.3 (2023-03-15 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 22621)
Matrix products: default
locale:
[1] LC_COLLATE=Spanish_Argentina.utf8 LC_CTYPE=Spanish_Argentina.utf8
[3] LC_MONETARY=Spanish_Argentina.utf8 LC_NUMERIC=C
[5] LC_TIME=Spanish_Argentina.utf8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] datosIC_0.0.0.9000 devtools_2.4.5 usethis_2.1.6 leaflet_2.1.2
[5] vroom_1.6.1 kableExtra_1.3.4 plotly_4.10.1 ggfortify_0.4.16
[9] lubridate_1.9.2 forcats_1.0.0 stringr_1.5.0 dplyr_1.1.2
[13] purrr_1.0.1 readr_2.1.4 tidyr_1.3.0 tibble_3.2.1
[17] tidyverse_2.0.0 ggplot2_3.4.2
loaded via a namespace (and not attached):
[1] httr_1.4.5 pkgload_1.3.2 bit64_4.0.5
[4] jsonlite_1.8.4 viridisLite_0.4.2 shiny_1.7.4
[7] highr_0.10 yaml_2.3.7 remotes_2.4.2
[10] sessioninfo_1.2.2 pillar_1.9.0 glue_1.6.2
[13] digest_0.6.31 promises_1.2.0.1 rvest_1.0.3
[16] leaflet.providers_1.9.0 colorspace_2.1-0 htmltools_0.5.5
[19] httpuv_1.6.9 pkgconfig_2.0.3 xtable_1.8-4
[22] scales_1.2.1 webshot_0.5.5 processx_3.8.0
[25] svglite_2.1.1 later_1.3.0 tzdb_0.3.0
[28] timechange_0.2.0 farver_2.1.1 generics_0.1.3
[31] ellipsis_0.3.2 cachem_1.0.7 withr_2.5.0
[34] lazyeval_0.2.2 cli_3.6.1 magrittr_2.0.3
[37] crayon_1.5.2 mime_0.12 memoise_2.0.1
[40] evaluate_0.20 ps_1.7.4 fs_1.6.1
[43] fansi_1.0.4 xml2_1.3.5 pkgbuild_1.4.0
[46] profvis_0.3.7 tools_4.2.3 data.table_1.14.8
[49] prettyunits_1.1.1 hms_1.1.3 lifecycle_1.0.3
[52] munsell_0.5.0 callr_3.7.3 compiler_4.2.3
[55] systemfonts_1.0.4 rlang_1.1.0 grid_4.2.3
[58] rstudioapi_0.14 htmlwidgets_1.6.2 crosstalk_1.2.0
[61] miniUI_0.1.1.1 labeling_0.4.2 rmarkdown_2.21
[64] gtable_0.3.4 curl_5.0.0 R6_2.5.1
[67] gridExtra_2.3 knitr_1.42 fastmap_1.1.1
[70] bit_4.0.5 utf8_1.2.3 stringi_1.7.12
[73] Rcpp_1.0.10 vctrs_0.6.1 urlchecker_1.0.1
[76] tidyselect_1.2.0 xfun_0.39