# ==========================================
# Carga de librerías
# ==========================================
library(dplyr)
library(readxl)
library(gt)
# ==========================================
# Carga de la base de datos
# ==========================================
datos <- read_excel("datos_deslizamientos.xlsx")
# ==========================================
# Visualización de la estructura de la base
# ==========================================
str(datos)
## tibble [11,033 × 31] (S3: tbl_df/tbl/data.frame)
## $ source_name : chr [1:11033] "AGU" "Oregonian" "CBS News" "Reuters" ...
## $ source_link : chr [1:11033] "https://blogs.agu.org/landslideblog/2008/10/14/the-lifan-landslide-from-natural-disaster-to-cover-up/" "http://www.oregonlive.com/news/index.ssf/2009/01/landslide_plows_through_lake_o.html" "https://www.cbsnews.com/news/dozens-missing-after-peru-landslides/" "https://in.reuters.com/article/idINIndia-41450420090731" ...
## $ event_id : num [1:11033] 684 956 973 1067 2603 ...
## $ event_date : POSIXct[1:11033], format: "2008-08-01" "2008-08-02" ...
## $ HORA : chr [1:11033] "00:00:00" "02:00:00" "00:00:00" "00:00:00" ...
## $ event_title : chr [1:11033] "Sigou Village, Loufan County, Shanxi Province" "Lake Oswego, Oregon" "San Ramon district, 195 miles northeast of the capital, Lima," "Dailekh district" ...
## $ event_description : chr [1:11033] "occurred early in morning, 11 villagers buried in 7 houses" "Hours of heavy rain are to blame for an overnight mudslide in Lake Oswego." "(CBS/AP) At least 10 people died and as many as 80 were still missing Wednesday in central Peru after torrentia"| __truncated__ "One person was killed in Dailekh district, police said." ...
## $ location_description : chr [1:11033] "Sigou Village, Loufan County, Shanxi Province" "Lake Oswego, Oregon" "San Ramon district, 195 miles northeast of the capital, Lima," "Dailekh district" ...
## $ location_accuracy : chr [1:11033] "unknown" "5km" "10km" "unknown" ...
## $ landslide_category : chr [1:11033] "landslide" "mudslide" "landslide" "landslide" ...
## $ landslide_trigger : chr [1:11033] "rain" "downpour" "downpour" "monsoon" ...
## $ landslide_size : chr [1:11033] "large" "small" "large" "medium" ...
## $ landslide_setting : chr [1:11033] "mine" "unknown" "unknown" "unknown" ...
## $ fatality_count : num [1:11033] 11 0 10 1 0 0 0 3 NA 2 ...
## $ injury_count : num [1:11033] NA NA NA NA NA NA NA NA NA NA ...
## $ storm_name : chr [1:11033] NA NA NA NA ...
## $ photo_link : chr [1:11033] NA NA NA NA ...
## $ notes : chr [1:11033] NA NA NA NA ...
## $ event_import_source : chr [1:11033] "glc" "glc" "glc" "glc" ...
## $ event_import_id : num [1:11033] 684 956 973 1067 2603 ...
## $ country_name : chr [1:11033] "China" "United States" "Peru" "Nepal" ...
## $ country_code : chr [1:11033] "CN" "US" "PE" "NP" ...
## $ admin_division_name : chr [1:11033] "Shaanxi" "Oregon" "Junín" "Mid Western" ...
## $ admin_division_population: num [1:11033] 0 36619 14708 20908 798634 ...
## $ gazeteer_closest_point : chr [1:11033] "Jingyang" "Lake Oswego" "San Ramón" "Dailekh" ...
## $ gazeteer_distance : num [1:11033] 41.021 0.603 0.855 0.754 2.022 ...
## $ submitted_date : POSIXct[1:11033], format: "2014-04-01 00:00:00" "2014-04-01 00:00:00" ...
## $ created_date : POSIXct[1:11033], format: "2017-11-20 15:17:00" "2017-11-20 15:17:00" ...
## $ last_edited_date : POSIXct[1:11033], format: "2018-02-15 15:51:00" "2018-02-15 15:51:00" ...
## $ longitude : num [1:11033] 107.5 -122.7 -75.4 81.7 123.9 ...
## $ latitude : num [1:11033] 32.6 45.4 -11.1 28.8 10.3 ...
# ==========================================
# Consolidación de categorías
# ==========================================
datos <- datos %>%
mutate(
landslide_trigger_consol = case_when(
landslide_trigger %in% c(
"downpour",
"rain",
"continuous_rain",
"monsoon"
) ~ "Precipitación",
landslide_trigger %in% c(
"snowfall_snowmelt",
"freeze_thaw"
) ~ "Fenómenos de nieve/hielo",
landslide_trigger %in% c(
"earthquake",
"volcano"
) ~ "Actividad geológica",
landslide_trigger %in% c(
"mining",
"construction",
"vibration",
"leaking_pipe"
) ~ "Desencadenante humano",
landslide_trigger %in% c(
"flooding",
"dam_embankment_collapse"
) ~ "Estructuras",
landslide_trigger %in% c(
"unknown",
"no_apparent_trigger",
"other"
) ~ "Otros desencadenantes",
TRUE ~ NA_character_
)
)
# ==========================================
# Extracción de la variable consolidada
# ==========================================
variable <- datos$landslide_trigger_consol
head(variable)
## [1] "Precipitación" "Precipitación" "Precipitación" "Precipitación"
## [5] NA "Precipitación"
# ==========================================
# Eliminación de valores faltantes
# ==========================================
# Número de NA antes de eliminarlos
sum(is.na(variable))
## [1] 584
# Cantidad de datos antes
length(variable)
## [1] 11033
# Eliminación de valores faltantes
variable <- variable[!is.na(variable)]
# Cantidad de datos después
length(variable)
## [1] 10449
# Número de NA después
sum(is.na(variable))
## [1] 0
# ==========================================
# Tamaño de la muestra
# ==========================================
N <- length(variable)
N
## [1] 10449
# ==========================================
# Definir el orden de las categorías
# ==========================================
orden_categorias <- c(
"Precipitación",
"Fenómenos de nieve/hielo",
"Actividad geológica",
"Desencadenante humano",
"Estructuras",
"Otros desencadenantes"
)
# ==========================================
# Convertir la variable en factor
# ==========================================
variable <- factor(
variable,
levels = orden_categorias
)
# ==========================================
# Frecuencia absoluta
# ==========================================
ni <- table(variable)
ni
## variable
## Precipitación Fenómenos de nieve/hielo Actividad geológica
## 8149 176 90
## Desencadenante humano Estructuras Otros desencadenantes
## 186 87 1761
# ==========================================
# Probabilidad simple
# ==========================================
hi <- prop.table(ni)
# ==========================================
# Probabilidad porcentual
# ==========================================
P <- hi * 100
# ==========================================
# Construcción de la tabla
# ==========================================
tabla_probabilidad <- data.frame(
Categoria = names(ni),
ni = as.numeric(ni),
hi = as.numeric(hi),
P = as.numeric(P)
)
tabla_probabilidad
## Categoria ni hi P
## 1 Precipitación 8149 0.779883242 77.9883242
## 2 Fenómenos de nieve/hielo 176 0.016843717 1.6843717
## 3 Actividad geológica 90 0.008613264 0.8613264
## 4 Desencadenante humano 186 0.017800746 1.7800746
## 5 Estructuras 87 0.008326156 0.8326156
## 6 Otros desencadenantes 1761 0.168532874 16.8532874
# ==========================================
# Probabilidad acumulada
# ==========================================
tabla_probabilidad$Hi <- cumsum(tabla_probabilidad$hi)
# ==========================================
# Probabilidad acumulada (%)
# ==========================================
tabla_probabilidad$P_acumulada <-
tabla_probabilidad$Hi * 100
tabla_probabilidad
## Categoria ni hi P Hi P_acumulada
## 1 Precipitación 8149 0.779883242 77.9883242 0.7798832 77.98832
## 2 Fenómenos de nieve/hielo 176 0.016843717 1.6843717 0.7967270 79.67270
## 3 Actividad geológica 90 0.008613264 0.8613264 0.8053402 80.53402
## 4 Desencadenante humano 186 0.017800746 1.7800746 0.8231410 82.31410
## 5 Estructuras 87 0.008326156 0.8326156 0.8314671 83.14671
## 6 Otros desencadenantes 1761 0.168532874 16.8532874 1.0000000 100.00000
# ==========================================
# Agregar fila TOTAL
# ==========================================
fila_total <- data.frame(
Categoria = "TOTAL",
ni = sum(tabla_probabilidad$ni),
hi = sum(tabla_probabilidad$hi),
P = sum(tabla_probabilidad$P),
Hi = max(tabla_probabilidad$Hi),
P_acumulada = max(tabla_probabilidad$P_acumulada)
)
# ==========================================
# Tabla completa
# ==========================================
tabla_probabilidad_total <- rbind(
tabla_probabilidad,
fila_total
)
tabla_probabilidad_total
## Categoria ni hi P Hi P_acumulada
## 1 Precipitación 8149 0.779883242 77.9883242 0.7798832 77.98832
## 2 Fenómenos de nieve/hielo 176 0.016843717 1.6843717 0.7967270 79.67270
## 3 Actividad geológica 90 0.008613264 0.8613264 0.8053402 80.53402
## 4 Desencadenante humano 186 0.017800746 1.7800746 0.8231410 82.31410
## 5 Estructuras 87 0.008326156 0.8326156 0.8314671 83.14671
## 6 Otros desencadenantes 1761 0.168532874 16.8532874 1.0000000 100.00000
## 7 TOTAL 10449 1.000000000 100.0000000 1.0000000 100.00000
tabla_presentacion <- tabla_probabilidad_total %>%
gt() %>%
tab_header(
title = md("**Tabla N° 1**"),
subtitle = md("Distribución de probabilidad de los desencadenantes de deslizamientos a nivel mundial")
) %>%
cols_label(
Categoria = "Desencadenante",
ni = "Frecuencia absoluta (ni)",
hi = "Probabilidad",
P = "Probabilidad (%)",
Hi = "Probabilidad acumulada",
P_acumulada = "Probabilidad acumulada (%)"
) %>%
fmt_number(
columns = c(hi, Hi),
decimals = 4
) %>%
fmt_number(
columns = c(P, P_acumulada),
decimals = 2
) %>%
tab_style(
style = list(
cell_fill(color = "#6D213C"),
cell_text(
color = "white",
weight = "bold"
)
),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(
rows = Categoria == "TOTAL"
)
) %>%
tab_source_note(
source_note = md("Autor: Grupo 1 – Carrera de Geología")
)
tabla_presentacion
| Tabla N° 1 | |||||
| Distribución de probabilidad de los desencadenantes de deslizamientos a nivel mundial | |||||
| Desencadenante | Frecuencia absoluta (ni) | Probabilidad | Probabilidad (%) | Probabilidad acumulada | Probabilidad acumulada (%) |
|---|---|---|---|---|---|
| Precipitación | 8149 | 0.7799 | 77.99 | 0.7799 | 77.99 |
| Fenómenos de nieve/hielo | 176 | 0.0168 | 1.68 | 0.7967 | 79.67 |
| Actividad geológica | 90 | 0.0086 | 0.86 | 0.8053 | 80.53 |
| Desencadenante humano | 186 | 0.0178 | 1.78 | 0.8231 | 82.31 |
| Estructuras | 87 | 0.0083 | 0.83 | 0.8315 | 83.15 |
| Otros desencadenantes | 1761 | 0.1685 | 16.85 | 1.0000 | 100.00 |
| TOTAL | 10449 | 1.0000 | 100.00 | 1.0000 | 100.00 |
| Autor: Grupo 1 – Carrera de Geología | |||||
# ==========================================
# Tabla para las gráficas
# ==========================================
tabla_graficos <- tabla_probabilidad
par(mar = c(12, 5, 4, 2))
pos_x <- barplot(
tabla_graficos$P,
names.arg = tabla_graficos$Categoria,
col = "steelblue",
border = "black",
space = 0.20,
las = 2,
ylim = c(0,100),
yaxt = "n",
main = "Gráfica 1: Distribución de probabilidad de\nlos desencadenantes de deslizamientos",
xlab = "",
ylab = "Probabilidad (%)",
cex.names = 0.75
)
ticks_y <- seq(0,100,20)
axis(
side = 2,
at = ticks_y,
labels = ticks_y,
las = 1
)
text(
x = pos_x,
y = tabla_graficos$P,
labels = round(tabla_graficos$P,2),
pos = 3,
font = 2,
cex = 0.80
)
par(mar = c(12, 5, 4, 2))
pos_x <- barplot(
tabla_graficos$P_acumulada,
names.arg = tabla_graficos$Categoria,
col = "skyblue",
border = "black",
space = 0.20,
las = 2,
ylim = c(0,100),
yaxt = "n",
main = "Gráfica 2: Distribución de probabilidad acumulada\nde los desencadenantes de deslizamientos",
xlab = "",
ylab = "Probabilidad acumulada (%)",
cex.names = 0.75
)
ticks_y <- seq(0,100,20)
axis(
side = 2,
at = ticks_y,
labels = ticks_y,
las = 1
)
abline(
h = 100,
col = "red",
lty = 2,
lwd = 2
)
text(
x = pos_x,
y = tabla_graficos$P_acumulada,
labels = round(tabla_graficos$P_acumulada,2),
pos = 3,
font = 2,
cex = 0.80
)
# ==========================================
# Eliminar la fila TOTAL
# ==========================================
tabla_sin_total <- tabla_probabilidad_total %>%
filter(Categoria != "TOTAL")
# ==========================================
# Categoría de interés
# ==========================================
categoria_interes <- "Precipitación"
# ==========================================
# Probabilidad empírica
# ==========================================
probabilidad <- tabla_sin_total$P[
tabla_sin_total$Categoria == categoria_interes
]
probabilidad
## [1] 77.98832
plot(
1,
type = "n",
axes = FALSE,
xlab = "",
ylab = ""
)
texto <- paste0(
"Estimación empírica de la probabilidad\n\n",
"La probabilidad de que un deslizamiento\n",
"seleccionado aleatoriamente haya sido\n",
"desencadenado por:\n\n",
"'", categoria_interes, "'\n\n",
"es de ", round(probabilidad,2), "%."
)
text(
x = 1,
y = 1,
labels = texto,
cex = 1.20,
font = 2
)
El análisis de la variable cualitativa nominal desencadenante del deslizamiento permitió estimar la distribución de probabilidad de 10449 eventos registrados, agrupados en 6 categorías.
La mayor probabilidad corresponde a la categoría Precipitación, con una probabilidad de 77.99 %, lo que indica que este constituye el principal desencadenante de los deslizamientos registrados en la base de datos analizada.