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 inicial de la base de datos
# ==========================================
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 ...
# ==========================================
# Visualización de las primeras filas
# ==========================================
head(datos)
## # A tibble: 6 × 31
## source_name source_link event_id event_date HORA event_title
## <chr> <chr> <dbl> <dttm> <chr> <chr>
## 1 AGU https://bl… 684 2008-08-01 00:00:00 00:0… Sigou Vill…
## 2 Oregonian http://www… 956 2008-08-02 00:00:00 02:0… Lake Osweg…
## 3 CBS News https://ww… 973 2008-08-03 00:00:00 00:0… San Ramon …
## 4 Reuters https://in… 1067 2008-08-04 00:00:00 00:0… Dailekh di…
## 5 The Freeman http://www… 2603 2008-08-05 00:00:00 12:0… sitio Baki…
## 6 BusinessWorld Onli… http://www… 4203 2008-08-06 00:00:00 00:0… Paguite, A…
## # ℹ 25 more variables: event_description <chr>, location_description <chr>,
## # location_accuracy <chr>, landslide_category <chr>, landslide_trigger <chr>,
## # landslide_size <chr>, landslide_setting <chr>, fatality_count <dbl>,
## # injury_count <dbl>, storm_name <chr>, photo_link <chr>, notes <chr>,
## # event_import_source <chr>, event_import_id <dbl>, country_name <chr>,
## # country_code <chr>, admin_division_name <chr>,
## # admin_division_population <dbl>, gazeteer_closest_point <chr>, …
2. PREPARACIÓN DE LA VARIABLE
2.1 Definición del orden de las categorías
# ==========================================
# Definición del orden ordinal
# ==========================================
orden_size <- c(
"small",
"medium",
"large",
"very_large"
)
orden_size
## [1] "small" "medium" "large" "very_large"
2.2 Conversión de la variable a factor
ordenado
# ==========================================
# Conversión a factor ordinal
# ==========================================
datos <- datos %>%
mutate(
landslide_size = factor(
landslide_size,
levels = orden_size,
ordered = TRUE
)
)
# Verificación de la estructura ordinal
str(datos$landslide_size)
## Ord.factor w/ 4 levels "small"<"medium"<..: 3 1 3 2 2 2 1 2 2 2 ...
2.4 Eliminación de valores faltantes
# ==========================================
# Identificación de valores faltantes
# ==========================================
NA_antes <- sum(is.na(variable_ordinal))
NA_antes
## [1] 863
# ==========================================
# Eliminación de valores NA
# ==========================================
variable_ordinal <- variable_ordinal[
!is.na(variable_ordinal)
]
# ==========================================
# Verificación posterior
# ==========================================
NA_despues <- sum(is.na(variable_ordinal))
NA_despues
## [1] 0
2.5 Tamaño de la muestra
# ==========================================
# Número total de observaciones válidas
# ==========================================
n <- length(variable_ordinal)
n
## [1] 10170
3. DISTRIBUCIÓN DE PROBABILIDAD
3.1 Frecuencia absoluta
# ==========================================
# Frecuencia absoluta de cada categoría
# ==========================================
frecuencia_absoluta <- table(
variable_ordinal
)
frecuencia_absoluta
## variable_ordinal
## small medium large very_large
## 2767 6551 750 102
3.2 Probabilidad simple
# ==========================================
# Probabilidad simple
# ==========================================
probabilidad_simple <- prop.table(
frecuencia_absoluta
)
probabilidad_simple
## variable_ordinal
## small medium large very_large
## 0.27207473 0.64414946 0.07374631 0.01002950
# ==========================================
# Probabilidad porcentual
# ==========================================
probabilidad_porcentaje <- probabilidad_simple * 100
probabilidad_porcentaje
## variable_ordinal
## small medium large very_large
## 27.207473 64.414946 7.374631 1.002950
3.3 Construcción de la distribución de
probabilidad
# ==========================================
# Tabla de distribución de probabilidad
# ==========================================
tabla_distribucion <- data.frame(
Categoria = names(frecuencia_absoluta),
ni = as.numeric(frecuencia_absoluta),
hi = as.numeric(probabilidad_simple),
P = as.numeric(probabilidad_porcentaje)
)
tabla_distribucion
## Categoria ni hi P
## 1 small 2767 0.27207473 27.207473
## 2 medium 6551 0.64414946 64.414946
## 3 large 750 0.07374631 7.374631
## 4 very_large 102 0.01002950 1.002950
3.4 Probabilidad acumulada
# ==========================================
# Frecuencia acumulada
# ==========================================
tabla_distribucion$Ni <- cumsum(
tabla_distribucion$ni
)
# ==========================================
# Probabilidad acumulada
# ==========================================
tabla_distribucion$Hi <- cumsum(
tabla_distribucion$hi
)
# ==========================================
# Probabilidad acumulada porcentual
# ==========================================
tabla_distribucion$P_acumulada <- tabla_distribucion$Hi * 100
tabla_distribucion
## Categoria ni hi P Ni Hi P_acumulada
## 1 small 2767 0.27207473 27.207473 2767 0.2720747 27.20747
## 2 medium 6551 0.64414946 64.414946 9318 0.9162242 91.62242
## 3 large 750 0.07374631 7.374631 10068 0.9899705 98.99705
## 4 very_large 102 0.01002950 1.002950 10170 1.0000000 100.00000
4. TABLA DE DISTRIBUCIÓN DE PROBABILIDAD
4.1 Tabla simple de distribución
# ==========================================
# Creación de la fila total
# ==========================================
fila_total <- data.frame(
Categoria = "TOTAL",
ni = sum(tabla_distribucion$ni),
hi = sum(tabla_distribucion$hi),
P = sum(tabla_distribucion$P),
Ni = NA,
Hi = NA,
P_acumulada = NA
)
# ==========================================
# Tabla completa con total incluido
# ==========================================
tabla_distribucion_total <- rbind(
tabla_distribucion,
fila_total
)
tabla_distribucion_total
## Categoria ni hi P Ni Hi P_acumulada
## 1 small 2767 0.27207473 27.207473 2767 0.2720747 27.20747
## 2 medium 6551 0.64414946 64.414946 9318 0.9162242 91.62242
## 3 large 750 0.07374631 7.374631 10068 0.9899705 98.99705
## 4 very_large 102 0.01002950 1.002950 10170 1.0000000 100.00000
## 5 TOTAL 10170 1.00000000 100.000000 NA NA NA
4.2 Tabla de presentación
# ==========================================
# Diseño de la tabla final
# ==========================================
tabla_presentacion <- tabla_distribucion_total %>%
gt() %>%
tab_header(
title = md("**Tabla N° 1**"),
subtitle = md(
"Distribución de probabilidad del tamaño de los deslizamientos a nivel mundial"
)
) %>%
cols_label(
Categoria = "Tamaño del deslizamiento",
ni = "Frecuencia absoluta (ni)",
hi = "Probabilidad (hi)",
P = "Probabilidad (%)",
Ni = "Frecuencia acumulada (Ni)",
Hi = "Probabilidad acumulada (Hi)",
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 del tamaño de los deslizamientos a nivel mundial |
| Tamaño del deslizamiento |
Frecuencia absoluta (ni) |
Probabilidad (hi) |
Probabilidad (%) |
Frecuencia acumulada (Ni) |
Probabilidad acumulada (Hi) |
Probabilidad acumulada (%) |
| small |
2767 |
0.2721 |
27.21 |
2767 |
0.2721 |
27.21 |
| medium |
6551 |
0.6441 |
64.41 |
9318 |
0.9162 |
91.62 |
| large |
750 |
0.0737 |
7.37 |
10068 |
0.9900 |
99.00 |
| very_large |
102 |
0.0100 |
1.00 |
10170 |
1.0000 |
100.00 |
| TOTAL |
10170 |
1.0000 |
100.00 |
NA |
NA |
NA |
| Autor: Grupo 1 – Carrera de Geología |
5. GRÁFICAS DE LA DISTRIBUCIÓN DE PROBABILIDAD
5.1 Distribución de probabilidad
# ==========================================
# Preparación del gráfico
# ==========================================
par(
mar = c(8,5,4,2)
)
pos_x <- barplot(
tabla_distribucion$P,
names.arg = tabla_distribucion$Categoria,
col = "steelblue",
border = "black",
space = 0.20,
ylim = c(0,100),
las = 1,
yaxt = "n",
main = "Gráfica N° 1. Distribución de probabilidad\n del tamaño de los deslizamientos",
xlab = "Tamaño del deslizamiento",
ylab = "Probabilidad (%)"
)
# ==========================================
# Escala del eje Y
# ==========================================
ticks_y <- seq(
0,
100,
20
)
axis(
side = 2,
at = ticks_y,
labels = ticks_y,
las = 1
)
# ==========================================
# Etiquetas de porcentaje
# ==========================================
text(
x = pos_x,
y = tabla_distribucion$P,
labels = round(
tabla_distribucion$P,
2
),
pos = 3,
cex = 0.80,
font = 2
)

5.2 Distribución acumulada
# ==========================================
# Preparación del gráfico acumulado
# ==========================================
par(
mar = c(8,5,4,2)
)
pos_x <- barplot(
tabla_distribucion$P_acumulada,
names.arg = tabla_distribucion$Categoria,
col = "skyblue",
border = "black",
space = 0.20,
ylim = c(0,100),
las = 1,
yaxt = "n",
main = "Gráfica N° 2. Distribución acumulada\n del tamaño de los deslizamientos",
xlab = "Tamaño del deslizamiento",
ylab = "Probabilidad acumulada (%)"
)
# ==========================================
# Escala del eje Y
# ==========================================
ticks_y <- seq(
0,
100,
20
)
axis(
side = 2,
at = ticks_y,
labels = ticks_y,
las = 1
)
# ==========================================
# Línea de referencia del 100 %
# ==========================================
abline(
h = 100,
col = "red",
lty = 2,
lwd = 2
)
# ==========================================
# Etiquetas de porcentaje acumulado
# ==========================================
text(
x = pos_x,
y = tabla_distribucion$P_acumulada,
labels = round(
tabla_distribucion$P_acumulada,
2
),
pos = 3,
cex = 0.80,
font = 2
)

6. ESTADÍSTICA INFERENCIAL
6.1 Estimación puntual de la proporción
# ==========================================
# Estimación puntual de las proporciones
# ==========================================
proporcion_muestral <- tabla_distribucion$hi
proporcion_muestral
## [1] 0.27207473 0.64414946 0.07374631 0.01002950
# ==========================================
# Construcción de la tabla
# ==========================================
tabla_inferencia <- data.frame(
Categoria = tabla_distribucion$Categoria,
Proporcion = proporcion_muestral
)
tabla_inferencia
## Categoria Proporcion
## 1 small 0.27207473
## 2 medium 0.64414946
## 3 large 0.07374631
## 4 very_large 0.01002950
6.2 Error estándar de la proporción
# ==========================================
# Error estándar de cada proporción
# ==========================================
error_estandar <- sqrt(
proporcion_muestral *
(1 - proporcion_muestral) / n
)
error_estandar
## [1] 0.0044129299 0.0047475185 0.0025916399 0.0009880758
# ==========================================
# Incorporación a la tabla
# ==========================================
tabla_inferencia$Error_estandar <- error_estandar
tabla_inferencia
## Categoria Proporcion Error_estandar
## 1 small 0.27207473 0.0044129299
## 2 medium 0.64414946 0.0047475185
## 3 large 0.07374631 0.0025916399
## 4 very_large 0.01002950 0.0009880758
6.3 Intervalo de confianza del 95 %
# ==========================================
# Valor crítico para un nivel de confianza
# del 95 %
# ==========================================
z <- qnorm(0.975)
z
## [1] 1.959964
# ==========================================
# Límite inferior
# ==========================================
limite_inferior <- proporcion_muestral -
z * error_estandar
# ==========================================
# Límite superior
# ==========================================
limite_superior <- proporcion_muestral +
z * error_estandar
# ==========================================
# Ajuste de límites al intervalo [0,1]
# ==========================================
limite_inferior <- pmax(
0,
limite_inferior
)
limite_superior <- pmin(
1,
limite_superior
)
# ==========================================
# Incorporación a la tabla
# ==========================================
tabla_inferencia$Limite_inferior <- limite_inferior
tabla_inferencia$Limite_superior <- limite_superior
tabla_inferencia
## Categoria Proporcion Error_estandar Limite_inferior Limite_superior
## 1 small 0.27207473 0.0044129299 0.263425546 0.28072391
## 2 medium 0.64414946 0.0047475185 0.634844494 0.65345442
## 3 large 0.07374631 0.0025916399 0.068666792 0.07882583
## 4 very_large 0.01002950 0.0009880758 0.008092906 0.01196609
6.4 Presentación de la inferencia estadística
# ==========================================
# Tabla de presentación
# ==========================================
tabla_inferencia %>%
gt() %>%
tab_header(
title = md("**Tabla N° 2**"),
subtitle = md(
"Estimación puntual e intervalos de confianza para las proporciones del tamaño de los deslizamientos"
)
) %>%
cols_label(
Categoria = "Tamaño del deslizamiento",
Proporcion = "Proporción",
Error_estandar = "Error estándar",
Limite_inferior = "Límite inferior (95 %)",
Limite_superior = "Límite superior (95 %)"
) %>%
fmt_number(
columns = c(
Proporcion,
Error_estandar,
Limite_inferior,
Limite_superior
),
decimals = 4
) %>%
tab_style(
style = list(
cell_fill(color = "#6D213C"),
cell_text(
color = "white",
weight = "bold"
)
),
locations = cells_column_labels()
) %>%
tab_source_note(
source_note = md(
"Autor: Grupo 1 – Carrera de Geología"
)
)
| Tabla N° 2 |
| Estimación puntual e intervalos de confianza para las proporciones del tamaño de los deslizamientos |
| Tamaño del deslizamiento |
Proporción |
Error estándar |
Límite inferior (95 %) |
Límite superior (95 %) |
| small |
0.2721 |
0.0044 |
0.2634 |
0.2807 |
| medium |
0.6441 |
0.0047 |
0.6348 |
0.6535 |
| large |
0.0737 |
0.0026 |
0.0687 |
0.0788 |
| very_large |
0.0100 |
0.0010 |
0.0081 |
0.0120 |
| Autor: Grupo 1 – Carrera de Geología |
7. CÁLCULO DE PROBABILIDADES
7.1 Probabilidad observada
# ==========================================
# Categoría de interés
# ==========================================
categoria_interes <- "medium"
categoria_interes
## [1] "medium"
# ==========================================
# Búsqueda de la categoría
# ==========================================
fila_categoria <- tabla_inferencia %>%
filter(
Categoria == categoria_interes
)
fila_categoria
## Categoria Proporcion Error_estandar Limite_inferior Limite_superior
## 1 medium 0.6441495 0.004747518 0.6348445 0.6534544
# ==========================================
# Probabilidad observada
# ==========================================
probabilidad <- fila_categoria$Proporcion
probabilidad
## [1] 0.6441495
7.2 Intervalo de confianza de la probabilidad
# ==========================================
# Intervalo de confianza
# ==========================================
limite_inferior <- fila_categoria$Limite_inferior
limite_superior <- fila_categoria$Limite_superior
limite_inferior
## [1] 0.6348445
limite_superior
## [1] 0.6534544
7.3 Interpretación
plot(
1,
type = "n",
axes = FALSE,
xlab = "",
ylab = ""
)
texto <- paste0(
"Estimación del intervalo de confianza\n\n",
"Para la categoría:\n\n",
"'",
categoria_interes,
"'\n\n",
"la proporción observada fue de ",
round(probabilidad * 100, 2),
"%.\n\n",
"Con un nivel de confianza del 95 %, se estima\n",
"que la proporción poblacional se encuentra\n",
"entre ",
round(limite_inferior * 100, 2),
"% y ",
round(limite_superior * 100, 2),
"%."
)
text(
x = 1,
y = 1,
labels = texto,
cex = 1.20,
font = 2
)

8. CONCLUSIÓN
# ==========================================
# Categoría con mayor probabilidad
# ==========================================
indice_maximo <- which.max(
tabla_inferencia$Proporcion
)
categoria_mayor <- tabla_inferencia$Categoria[
indice_maximo
]
probabilidad_mayor <- round(
tabla_inferencia$Proporcion[indice_maximo] * 100,
2
)
lim_inf <- round(
tabla_inferencia$Limite_inferior[indice_maximo] * 100,
2
)
lim_sup <- round(
tabla_inferencia$Limite_superior[indice_maximo] * 100,
2
)
# ==========================================
# Presentación de la conclusión
# ==========================================
plot(
1,
type = "n",
axes = FALSE,
xlab = "",
ylab = ""
)
texto <- paste0(
"Conclusión\n\n",
"La categoría '",
categoria_mayor,
"' presentó la mayor proporción observada\n",
"de deslizamientos, con un valor de ",
probabilidad_mayor,
"%.\n\n",
"Con un nivel de confianza del 95 %, la\n",
"proporción poblacional para esta categoría\n",
"se estima entre ",
lim_inf,
"% y ",
lim_sup,
"%.\n\n",
"Estos resultados permiten inferir que esta\n",
"categoría constituye la más representativa\n",
"dentro del conjunto de deslizamientos\n",
"analizados."
)
text(
x = 1,
y = 1,
labels = texto,
cex = 1.15,
font = 2
)
