En este documento se presenta el análisis estadístico y probabilístico de los deslizamientos de tierra a nivel global, utilizando la variable Latitud (°) . Se aplican modelos probabilísticos y pruebas estadísticas con el fin de evaluar el comportamiento espacial de los eventos y la adecuación de distintos modelos teóricos.
# Librerías
library(readxl)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(gt)
library(knitr)
# Carga de datos
datos <- read_excel("datos_nuevoartes.xlsx")
# Definición de la variable
latitude <- datos$latitude
latitude <- latitude[!is.na(latitude)]
n_lat <- length(latitude)
# Parámetros de clasificación
k_lat <- 12
min_lat <- min(latitude)
max_lat <- max(latitude)
R_lat <- max_lat - min_lat
A_real <- R_lat / k_lat
# Ajuste de amplitud
A_lat <- ifelse(
A_real <= 2, 2,
ifelse(
A_real <= 5, 5,
ifelse(A_real <= 10, 10, ceiling(A_real / 10) * 10)
)
)
# Definición de clases
Li0 <- floor(min_lat / A_lat) * A_lat
Li_lat <- seq(Li0, by = A_lat, length.out = k_lat)
Ls_lat <- Li_lat + A_lat
MC_lat <- round((Li_lat + Ls_lat) / 2, 2)
# Frecuencias
ni_lat <- numeric(k_lat)
for (i in 1:k_lat) {
if (i < k_lat) {
ni_lat[i] <- sum(latitude >= Li_lat[i] & latitude < Ls_lat[i])
} else {
ni_lat[i] <- sum(latitude >= Li_lat[i] & latitude <= max_lat)
}
}
hi_lat <- (ni_lat / sum(ni_lat)) * 100
Ni_asc <- cumsum(ni_lat)
Ni_dsc <- rev(cumsum(rev(ni_lat)))
Hi_asc <- cumsum(hi_lat)
Hi_dsc <- rev(cumsum(rev(hi_lat)))
# Tabla
TDF_latitude <- data.frame(
Li = Li_lat,
Ls = Ls_lat,
MC = MC_lat,
ni = ni_lat,
hi = hi_lat,
Ni_asc = Ni_asc,
Ni_dsc = Ni_dsc,
Hi_asc = Hi_asc,
Hi_dsc = Hi_dsc
)
TDF_latitude <- rbind(
TDF_latitude,
data.frame(
Li = "TOTAL",
Ls = "",
MC = "",
ni = sum(ni_lat),
hi = 100,
Ni_asc = "",
Ni_dsc = "",
Hi_asc = "",
Hi_dsc = ""
)
)
tabla_latitude <- TDF_latitude %>%
mutate(
hi = round(as.numeric(hi), 2),
Hi_asc = round(as.numeric(Hi_asc), 2)
) %>%
gt() %>%
tab_header(
title = md("**Tabla N° 1**"),
subtitle = md("Distribución de frecuencias de Latitude (12 clases)")
) %>%
tab_source_note(
source_note = md("Elaborado por: Grupo 2 – Carrera de Geología")
)
tabla_latitude
| Tabla N° 1 | ||||||||
| Distribución de frecuencias de Latitude (12 clases) | ||||||||
| Li | Ls | MC | ni | hi | Ni_asc | Ni_dsc | Hi_asc | Hi_dsc |
|---|---|---|---|---|---|---|---|---|
| -50 | -40 | -45 | 99 | 0.90 | 99 | 11033 | 0.90 | 100 |
| -40 | -30 | -35 | 147 | 1.33 | 246 | 10934 | 2.23 | 99.1026919242273 |
| -30 | -20 | -25 | 257 | 2.33 | 503 | 10787 | 4.56 | 97.7703253874739 |
| -20 | -10 | -15 | 158 | 1.43 | 661 | 10530 | 5.99 | 95.4409498776398 |
| -10 | 0 | -5 | 498 | 4.51 | 1159 | 10372 | 10.50 | 94.0088824435784 |
| 0 | 10 | 5 | 1015 | 9.20 | 2174 | 9874 | 19.70 | 89.4951509109037 |
| 10 | 20 | 15 | 1394 | 12.63 | 3568 | 8859 | 32.34 | 80.2954772047494 |
| 20 | 30 | 25 | 1842 | 16.70 | 5410 | 7465 | 49.03 | 67.6606544004351 |
| 30 | 40 | 35 | 2554 | 23.15 | 7964 | 5623 | 72.18 | 50.9652859603009 |
| 40 | 50 | 45 | 2603 | 23.59 | 10567 | 3069 | 95.78 | 27.8165503489531 |
| 50 | 60 | 55 | 419 | 3.80 | 10986 | 466 | 99.57 | 4.22369255868757 |
| 60 | 70 | 65 | 47 | 0.43 | 11033 | 47 | 100.00 | 0.425994743043596 |
| TOTAL | 11033 | 100.00 | NA | |||||
| Elaborado por: Grupo 2 – Carrera de Geología | ||||||||
hist(
latitude,
breaks = k_lat,
col = "grey",
main = "Gráfica 5: Histograma de frecuencia absoluta de Latitude",
xlab = "Latitude (°)",
ylab = "Densidad de Probabilidad"
)
# DATOS BASE – AGRUPACIÓN 1
# Filtrado
lat_50_20 <- latitude[latitude >= -50 & latitude <= -20]
# Histograma BASE (frecuencia absoluta)
HistoLat1 <- hist(
lat_50_20,
breaks = seq(-50, -20, by = 10),
freq = TRUE,
col = "grey",
main = "Histograma base – Latitude (−50 a −20)",
xlab = "Latitude (°)",
ylab = "Densidad de Probabilidad"
)
# Frecuencias observadas
Fo_abs <- HistoLat1$counts
# Marcas de clase
MC_50_20 <- (HistoLat1$breaks[-length(HistoLat1$breaks)] +
HistoLat1$breaks[-1]) / 2
Modelo propuesto: Exponencial Variable: Latitud (°)
# Histograma para la conjetura (se vuelve a dibujar SOLO para graficar)
hist(
lat_50_20,
breaks = seq(-50, -20, by = 10),
freq = TRUE,
col = "grey",
main = "Gráfica Nº X: Conjetura del modelo exponencial\nLatitud (−50 a −20)",
xlab = "Latitud (°)",
ylab = "Densidad de Probabilidad"
)
# Ajuste preliminar del modelo exponencial
Fo_adj <- Fo_abs
Fo_adj[Fo_adj == 0] <- 0.5
ajuste_exp <- lm(log(Fo_adj) ~ MC_50_20)
b_est <- coef(ajuste_exp)[2]
# Curva del modelo
x_exp <- seq(-50, -20, length.out = 400)
y_exp <- exp(b_est * x_exp)
y_exp <- y_exp / max(y_exp) * max(Fo_abs)
# Superposición del modelo
lines(x_exp, y_exp, col = "red", lwd = 3)
legend(
"topright",
legend = c("Histograma", "Modelo exponencial"),
col = c("grey", "red"),
lwd = c(10, 3),
bty = "n"
)
A partir del histograma de densidad de la latitud de los intervalos comprendidos entre −50° y −20°, se observa una distribución asimétrica con incremento progresivo hacia los valores superiores del intervalo. Esta forma sugiere un comportamiento compatible con un modelo exponencial creciente, el cual se adopta como conjetura inicial y será evaluado posteriormente mediante los tests de Pearson y Chi-cuadrado.
# Cálculo de probabilidades por intervalo (modelo exponencial)
f_exp <- function(x) exp(b_est * x)
h <- length(Fo_abs)
P <- numeric(h)
for (i in 1:h) {
P[i] <- integrate(
f_exp,
lower = HistoLat1$breaks[i],
upper = HistoLat1$breaks[i + 1]
)$value
}
P <- P / sum(P)
# Frecuencias observadas
Fo_abs <- HistoLat1$counts
# Frecuencias esperadas (modelo exponencial)
Fe_abs <- P * sum(Fo_abs)
# Coeficiente de correlación de Pearson
pearson_r <- cor(Fo_abs, Fe_abs)
pearson_pct <- pearson_r * 100
pearson_pct
## [1] 99.60892
# Gráfica Fo vs Fe
plot(
Fo_abs, Fe_abs,
main = "Gráfica Nº X: Correlación Fo vs Fe\nModelo exponencial – Latitud (−50 a −20)",
xlab = "Frecuencia observada",
ylab = "Frecuencia esperada",
pch = 19,
col = "blue3"
)
abline(lm(Fe_abs ~ Fo_abs), col = "red", lwd = 2)
# Frecuencias en porcentaje
Fo <- (Fo_abs / sum(Fo_abs)) * 100
Fe <- (Fe_abs / sum(Fe_abs)) * 100
tabla_chi <- data.frame(Fo = Fo, Fe = Fe)
# Reagrupación para cumplir Fe ≥ 5
Fo_r <- c()
Fe_r <- c()
acum_Fo <- 0
acum_Fe <- 0
for (i in 1:nrow(tabla_chi)) {
acum_Fo <- acum_Fo + tabla_chi$Fo[i]
acum_Fe <- acum_Fe + tabla_chi$Fe[i]
if (acum_Fe >= 5) {
Fo_r <- c(Fo_r, acum_Fo)
Fe_r <- c(Fe_r, acum_Fe)
acum_Fo <- 0
acum_Fe <- 0
}
}
if (acum_Fe > 0) {
Fo_r[length(Fo_r)] <- Fo_r[length(Fo_r)] + acum_Fo
Fe_r[length(Fe_r)] <- Fe_r[length(Fe_r)] + acum_Fe
}
tabla_chi_final <- data.frame(Fo = Fo_r, Fe = Fe_r)
tabla_chi_final
## Fo Fe
## 1 19.68191 19.20433
## 2 29.22465 30.94199
## 3 51.09344 49.85368
# Estadístico Chi-cuadrado
x2 <- sum((tabla_chi_final$Fo - tabla_chi_final$Fe)^2 /
tabla_chi_final$Fe)
x2
## [1] 0.1380221
# Grados de libertad
k_validas <- nrow(tabla_chi_final)
m <- 1 # parámetro del modelo exponencial
gl <- k_validas - 1 - m
gl
## [1] 1
# Valor crítico
alpha <- 0.05
chi_crit <- qchisq(1 - alpha, gl)
chi_crit
## [1] 3.841459
# Decisión
if (x2 < chi_crit) {
"NO se rechaza H0: el modelo exponencial es adecuado"
} else {
"SE rechaza H0: el modelo exponencial NO es adecuado"
}
## [1] "NO se rechaza H0: el modelo exponencial es adecuado"
Distribución exponencial (−50 a −20)
# Función de densidad exponencial
f_exp <- function(x) exp(b_est * x)
# Constante de normalización en el intervalo
C_exp <- integrate(
f_exp,
lower = -50,
upper = -20
)$value
# Función de densidad normalizada
f_exp_norm <- function(x) {
f_exp(x) / C_exp
}
# Curva del modelo de probabilidad
x <- seq(-50, -20, length.out = 500)
y <- f_exp_norm(x)
plot(
x, y,
type = "l",
lwd = 2,
col = "skyblue3",
main = "Gráfica Nº X: Modelo de probabilidad exponencial\nLatitud (−50 a −20)",
xlab = "Latitud (°)",
ylab = "Densidad de probabilidad"
)
# Intervalo de interés
x_sec <- seq(-35, -25, by = 0.01)
y_sec <- f_exp_norm(x_sec)
# Área de probabilidad
polygon(
c(x_sec, rev(x_sec)),
c(y_sec, rep(0, length(y_sec))),
col = rgb(1, 0, 0, 0.6),
border = NA
)
lines(x_sec, y_sec, col = "red", lwd = 2)
legend(
"topleft",
legend = c("Modelo exponencial", "Área de probabilidad"),
col = c("skyblue3", "red"),
lwd = 3,
bty = "n"
)
Variable <- c("Latitude (−50 a −20)")
tabla_resumen <- data.frame(
Variable,
round(pearson_pct, 2),
round(x2, 2),
round(chi_crit, 2)
)
colnames(tabla_resumen) <- c(
"Variable",
"Test de Pearson (%)",
"Chi-cuadrado calculado",
"Chi-cuadrado crítico"
)
kable(
tabla_resumen,
format = "markdown",
caption = "Tabla Nº X: Resumen de los test de bondad – Modelo exponencial"
)
| Variable | Test de Pearson (%) | Chi-cuadrado calculado | Chi-cuadrado crítico |
|---|---|---|---|
| Latitude (−50 a −20) | 99.61 | 0.14 | 3.84 |
# DATOS BASE – AGRUPACIÓN 2
# Filtrado
lat_20_80 <- latitude[latitude >= -20 & latitude <= 80]
# Histograma BASE
HistoLat2 <- hist(
lat_20_80,
breaks = seq(-20, 80, by = 10),
freq = TRUE,
col = "grey",
main = "Histograma base – Latitude (−20 a 80)",
xlab = "Latitude (°)",
ylab = "Densidad de Probabilidad"
)
# Frecuencias observadas
Fo2_abs <- HistoLat2$counts
# Marcas de clase
MC_20_80 <- (HistoLat2$breaks[-length(HistoLat2$breaks)] +
HistoLat2$breaks[-1]) / 2
Modelo propuesto: Lognormal reflejado Variable: Latitud (°)
# Histograma para la conjetura
hist(
lat_20_80,
breaks = seq(-20, 80, by = 10),
freq = TRUE,
col = "grey",
main = "Gráfica Nº X: Conjetura del modelo lognormal\nLatitud (−20 a 80)",
xlab = "Latitud (°)",
ylab = "Densidad de Probabilidad"
)
# Transformación reflejada
x_ln <- max(lat_20_80) - lat_20_80 + 0.001
# Estimación de parámetros
mu_ln <- mean(log(x_ln))
sd_ln <- sd(log(x_ln))
# Curva lognormal
x_curve <- seq(min(x_ln), max(x_ln), length.out = 400)
y_ln <- dlnorm(x_curve, meanlog = mu_ln, sdlog = sd_ln)
y_ln <- y_ln / max(y_ln) * max(Fo2_abs)
# Transformación inversa para graficar
x_plot <- max(lat_20_80) - x_curve
lines(x_plot, y_ln, col = "blue3", lwd = 3)
legend(
"topleft",
legend = c("Histograma", "Modelo lognormal"),
col = c("grey", "blue3"),
lwd = c(10, 3),
bty = "n"
)
La distribución empírica de la latitud en el intervalo −20° a 80° presenta asimetría positiva y concentración progresiva, lo que sugiere un comportamiento compatible con un modelo lognormal reflejado , adoptado como conjetura inicial para su validación estadística.
# Límites de clase
Li <- HistoLat2$breaks[-length(HistoLat2$breaks)]
LS <- HistoLat2$breaks[-1]
# Transformación reflejada de límites
Li_ref <- max(lat_20_80) - LS + 0.001
LS_ref <- max(lat_20_80) - Li + 0.001
# Probabilidades teóricas
h <- length(Fo2_abs)
P2 <- numeric(h)
for (i in 1:h) {
P2[i] <- plnorm(
LS_ref[i], meanlog = mu_ln, sdlog = sd_ln
) -
plnorm(
Li_ref[i], meanlog = mu_ln, sdlog = sd_ln
)
}
# Frecuencias esperadas
Fe2_abs <- P2 * sum(Fo2_abs)
# Correlación de Pearson
pearson2_r <- cor(Fo2_abs, Fe2_abs)
pearson2_pct <- pearson2_r * 100
pearson2_pct
## [1] 97.90874
# Gráfica Fo vs Fe
plot(
Fo2_abs, Fe2_abs,
main = "Gráfica Nº X: Correlación Fo vs Fe\nModelo lognormal – Latitud (−20 a 80)",
xlab = "Frecuencia observada",
ylab = "Frecuencia esperada",
pch = 19,
col = "blue3"
)
abline(lm(Fe2_abs ~ Fo2_abs), col = "red", lwd = 2)
# Frecuencias porcentuales
Fo <- (Fo2_abs / sum(Fo2_abs)) * 100
Fe <- (Fe2_abs / sum(Fe2_abs)) * 100
tabla_chi <- data.frame(Fo = Fo, Fe = Fe)
# Reagrupación
Fo_r <- c()
Fe_r <- c()
acum_Fo <- 0
acum_Fe <- 0
for (i in 1:nrow(tabla_chi)) {
acum_Fo <- acum_Fo + tabla_chi$Fo[i]
acum_Fe <- acum_Fe + tabla_chi$Fe[i]
if (acum_Fe >= 5) {
Fo_r <- c(Fo_r, acum_Fo)
Fe_r <- c(Fe_r, acum_Fe)
acum_Fo <- 0
acum_Fe <- 0
}
}
if (acum_Fe > 0) {
Fo_r[length(Fo_r)] <- Fo_r[length(Fo_r)] + acum_Fo
Fe_r[length(Fe_r)] <- Fe_r[length(Fe_r)] + acum_Fe
}
tabla_chi_final <- data.frame(Fo = Fo_r, Fe = Fe_r)
# Estadístico
x2_2 <- sum((tabla_chi_final$Fo - tabla_chi_final$Fe)^2 /
tabla_chi_final$Fe)
# Grados de libertad
k_validas <- nrow(tabla_chi_final)
m <- 2
gl_2 <- k_validas - 1 - m
# Umbral
alpha <- 0.05
chi_crit_2 <- qchisq(1 - alpha, gl_2)
if (x2_2 < chi_crit_2) {
"NO se rechaza H0: el modelo lognormal es adecuado"
} else {
"SE rechaza H0: el modelo lognormal NO es adecuado"
}
## [1] "NO se rechaza H0: el modelo lognormal es adecuado"
## 4.5 MODELO DE PROBABILIDAD – AGRUPACIÓN 2
## Distribución lognormal reflejada (−20 a 80)
# Definición del dominio original
x_lat <- seq(-20, 80, length.out = 500)
# Transformación reflejada
x_ref <- max(lat_20_80) - x_lat + 0.001
# Función de densidad lognormal reflejada
f_ln <- dlnorm(
x_ref,
meanlog = mu_ln,
sdlog = sd_ln
)
# Normalización en el intervalo
C_ln <- integrate(
function(x) {
dlnorm(
max(lat_20_80) - x + 0.001,
meanlog = mu_ln,
sdlog = sd_ln
)
},
lower = -20,
upper = 80
)$value
f_ln_norm <- f_ln / C_ln
# Gráfica del modelo de probabilidad
plot(
x_lat,
f_ln_norm,
type = "l",
lwd = 2,
col = "skyblue3",
main = "Gráfica Nº X: Modelo de probabilidad lognormal reflejado\nLatitud (−20 a 80)",
xlab = "Latitud (°)",
ylab = "Densidad de probabilidad"
)
# Intervalo de probabilidad
x_sec <- seq(10, 40, by = 0.05)
x_sec_ref <- max(lat_20_80) - x_sec + 0.001
y_sec <- dlnorm(
x_sec_ref,
meanlog = mu_ln,
sdlog = sd_ln
) / C_ln
# Área sombreada
polygon(
c(x_sec, rev(x_sec)),
c(y_sec, rep(0, length(y_sec))),
col = rgb(1, 0, 0, 0.6),
border = NA
)
lines(x_sec, y_sec, col = "red", lwd = 2)
legend(
"topright",
legend = c("Modelo lognormal reflejado", "Área de probabilidad"),
col = c("skyblue3", "red"),
lwd = 3,
bty = "n"
)
Variable <- c("Latitude (−20 a 80)")
tabla_resumen_2 <- data.frame(
Variable,
round(pearson2_pct, 2),
round(x2_2, 2),
round(chi_crit_2, 2)
)
colnames(tabla_resumen_2) <- c(
"Variable",
"Test de Pearson (%)",
"Chi-cuadrado calculado",
"Chi-cuadrado crítico"
)
kable(
tabla_resumen_2,
format = "markdown",
caption = "Tabla Nº X: Resumen de los test de bondad – Modelo lognormal"
)
| Variable | Test de Pearson (%) | Chi-cuadrado calculado | Chi-cuadrado crítico |
|---|---|---|---|
| Latitude (−20 a 80) | 97.91 | 2.86 | 9.49 |
Con base en el modelo lognormal reflejado ajustado para la latitud en el intervalo −20° a 80°, se construye la función de densidad de probabilidad normalizada. Este modelo permite estimar la probabilidad de ocurrencia de tamaños dentro de subintervalos específicos, representados por el área bajo la curva, considerando la asimetría observada en la distribución empírica.
Variable: Latitud (°)
# Tamaño muestral
n_N <- length(lat_20_80)
# Media y desviación estándar muestral
media_N <- mean(lat_20_80)
sd_N <- sd(lat_20_80)
# Error estándar de la media
error_estandar_N <- sd_N / sqrt(n_N)
# Intervalo de confianza al 95 %
limit_inf_N <- media_N - 1.96 * error_estandar_N
limit_sup_N <- media_N + 1.96 * error_estandar_N
# Tabla resumen del TLC
tabla_media_norm <- data.frame(
`Límite inferior` = round(limit_inf_N, 2),
Variable = "LATITUD (−20 a 80)",
`Límite superior` = round(limit_sup_N, 2),
`Error estándar` = round(error_estandar_N, 2)
)
# Presentación de la tabla
kable(
tabla_media_norm,
format = "markdown",
caption = "Tabla Nº X. Intervalo de confianza de la media poblacional (95 %) – Teorema del Límite Central"
)
| Límite.inferior | Variable | Límite.superior | Error.estándar |
|---|---|---|---|
| 28.29 | LATITUD (−20 a 80) | 28.92 | 0.16 |
Con un nivel de confianza del 95% , se estima que la media poblacional de la latitud de los deslizamientos de tierra se encuentra comprendida entre los límites inferiores y superiores obtenidos. Este resultado es consistente con la aplicación del Teorema del Límite Central, dado el tamaño muestral y la representatividad del intervalo analizado.
La variable LATITUD presenta comportamientos probabilísticos diferenciados según el intervalo analizado. En la agrupación −50° a −20° , la latitud sigue un modelo de probabilidad exponencial , probando las pruebas de Pearson y Chi-Cuadrado , por lo que el modelo resulta estadísticamente adecuado. De esta manera, fue posible calcular probabilidades, como la ocurrencia de desplazamientos con latitud entre −35° y −25° , a partir del área bajo la curva del modelo ajustado.
Por otro lado, en la agrupación −20° a 80° , la variable latitud sigue un modelo de probabilidad lognormal reflejado , aprobando las pruebas de Pearson y Chi-Cuadrado , lo que permitió estimar probabilidades, como la probabilidad de que la latitud de los lados se encuentre entre 10° y 40° . Además, mediante el Teorema del Límite Central , se determina que la media aritmética poblacional de la latitud se encuentra dentro de un intervalo de confianza del 95% , confirmando la consistencia estadística de los resultados obtenidos.