Carga de Datos y Librerías Extraer la Variable Conclusión

1. CARGA DE DATOS Y LIBRERÍAS

# ==========================================
# 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 ...

2. EXTRAER LA VARIABLE

2.1 Consolidación de categorías

# ==========================================
# 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_

    )
  )

2.2 Extracción de la variable

# ==========================================
# 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"

2.3 Tratamiento de valores faltantes

# ==========================================
# 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

2.4 Tamaño de la muestra

# ==========================================
# Tamaño de la muestra
# ==========================================

N <- length(variable)

N
## [1] 10449

3.1 Cálculo de frecuencias

# ==========================================
# 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

3.2 Cálculo de probabilidades

# ==========================================
# 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

3.3 Probabilidad acumulada

# ==========================================
# 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

4. TABLA DE DISTRIBUCIÓN DE PROBABILIDAD

4.1 Tabla simple

# ==========================================
# 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

4.2 Presentación de la tabla

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

5. GRÁFICAS DE LA DISTRIBUCIÓN DE PROBABILIDAD

5.1 Diagrama de barras de la 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

)

5.2 Diagrama de barras de la probabilidad acumulada

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

)

6. CÁLCULO DE LA PROBABILIDAD

6.1 Cálculo de la probabilidad

# ==========================================
# 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

6.2 Interpretación de la probabilidad

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

)

7. CONCLUSIÓN

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.