library(readxl)
library(ggplot2)
library(knitr)
datos <- read_excel(
"dataset_landslides.xlsx",
sheet = "Dataset_landslides"
)
El índice de humedad del suelo se considera la variable independiente o causa (X), porque representa la humedad presente en el terreno.
La precipitación acumulada en 30 días se considera la variable dependiente o efecto (Y), porque es la respuesta que se relaciona con el índice de humedad del suelo.
Dentro del modelo se establece:
limpiar_numerico <- function(variable) {
variable <- as.character(variable)
variable <- gsub(",", ".", variable)
as.numeric(variable)
}
datos$soil_moisture_index <- limpiar_numerico(
datos$soil_moisture_index
)
datos$precipitation_30d_mm <- limpiar_numerico(
datos$precipitation_30d_mm
)
datos_originales <- datos[
is.finite(datos$soil_moisture_index) &
is.finite(datos$precipitation_30d_mm) &
datos$soil_moisture_index >= 0 &
datos$soil_moisture_index <= 1 &
datos$precipitation_30d_mm > 0,
c(
"soil_moisture_index",
"precipitation_30d_mm"
)
]
X_original <- datos_originales$soil_moisture_index
Y_original <- datos_originales$precipitation_30d_mm
tabla_original <- data.frame(
X_original = X_original,
Y_original = Y_original
)
cat(
"Tamaño muestral =",
nrow(tabla_original)
)
## Tamaño muestral = 11033
knitr::kable(
head(tabla_original, 20),
digits = 4,
col.names = c(
"Índice de humedad del suelo",
"Precipitación acumulada en 30 días (mm)"
),
caption = paste(
"Tabla Nro. 1. Pares de valores originales del índice",
"de humedad del suelo y la precipitación acumulada en 30 días"
)
)
| Índice de humedad del suelo | Precipitación acumulada en 30 días (mm) |
|---|---|
| 0.6991 | 228.20 |
| 0.9316 | 326.56 |
| 0.8163 | 207.24 |
| 0.8226 | 229.48 |
| 0.5915 | 64.64 |
| 0.9407 | 396.80 |
| 0.9310 | 306.79 |
| 0.9337 | 315.85 |
| 0.8726 | 276.36 |
| 0.9837 | 484.71 |
| 0.7566 | 182.13 |
| 0.6429 | 265.64 |
| 0.3742 | 57.04 |
| 0.6196 | 181.20 |
| 0.8753 | 253.93 |
| 0.5863 | 161.16 |
| 0.5639 | 169.64 |
| 0.5146 | 158.20 |
| 0.4690 | 108.92 |
| 0.9472 | 369.58 |
y_max_original <- max(
Y_original,
na.rm = TRUE
) * 1.05
ggplot(
tabla_original,
aes(
x = X_original,
y = Y_original
)
) +
geom_point(
color = "#00A6D6",
alpha = 0.50,
size = 1.5
) +
labs(
title = "Gráfica Nro. 1",
subtitle = paste0(
"Diagrama de dispersión entre el índice de humedad del suelo\n",
"y la precipitación acumulada en 30 días"
),
x = "Índice de humedad del suelo",
y = "Precipitación acumulada en 30 días (mm)"
) +
scale_x_continuous(
limits = c(0, 1),
breaks = seq(0, 1, by = 0.1),
expand = expansion(mult = 0, add = 0)
) +
scale_y_continuous(
limits = c(0, y_max_original),
expand = expansion(mult = 0, add = 0)
) +
coord_cartesian(
xlim = c(0, 1),
ylim = c(0, y_max_original),
expand = FALSE
) +
theme_bw(base_size = 14) +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
color = "#6D213C",
size = 17
),
plot.subtitle = element_text(
hjust = 0.5,
face = "bold",
size = 13,
lineheight = 1.1
),
axis.title = element_text(
face = "bold"
),
panel.grid.minor = element_blank()
)
Promediación de los datos
Con el fin de reducir la dispersión, el índice de humedad del suelo se agrupa por centésimas y se calcula la precipitación promedio para cada valor agrupado. Esto permite identificar con mayor claridad la tendencia exponencial.
datos_originales$humedad_agrupada <- round(
datos_originales$soil_moisture_index,
2
)
datos_prom <- aggregate(
precipitation_30d_mm ~ humedad_agrupada,
data = datos_originales,
FUN = mean
)
datos_prom <- datos_prom[
order(datos_prom$humedad_agrupada),
]
X <- datos_prom$humedad_agrupada
Y <- datos_prom$precipitation_30d_mm
cat(
"Tamaño muestral del modelo =",
nrow(datos_prom)
)
## Tamaño muestral del modelo = 90
tabla_simplificada <- data.frame(
X = X,
Y = Y
)
knitr::kable(
head(tabla_simplificada, 20),
digits = 4,
col.names = c(
"Índice de humedad del suelo",
"Precipitación promedio en 30 días (mm)"
),
caption = paste(
"Tabla Nro. 2. Pares de valores simplificados del índice",
"de humedad del suelo y la precipitación acumulada en 30 días"
)
)
| Índice de humedad del suelo | Precipitación promedio en 30 días (mm) |
|---|---|
| 0.10 | 17.7700 |
| 0.12 | 44.0000 |
| 0.13 | 19.6500 |
| 0.14 | 32.4400 |
| 0.15 | 52.3600 |
| 0.16 | 53.0367 |
| 0.17 | 47.5660 |
| 0.18 | 56.0577 |
| 0.19 | 56.5427 |
| 0.20 | 70.1778 |
| 0.21 | 62.4624 |
| 0.22 | 54.5000 |
| 0.23 | 61.6977 |
| 0.24 | 66.5314 |
| 0.25 | 66.0197 |
| 0.26 | 70.0533 |
| 0.27 | 64.0521 |
| 0.28 | 72.2964 |
| 0.29 | 76.9136 |
| 0.30 | 77.4836 |
y_max_simplificado <- max(
Y,
na.rm = TRUE
) * 1.05
ggplot(
tabla_simplificada,
aes(
x = X,
y = Y
)
) +
geom_point(
color = "#00A6D6",
alpha = 0.70,
size = 2
) +
labs(
title = "Gráfica Nro. 2",
subtitle = paste0(
"Diagrama de dispersión simplificado entre el índice de humedad del suelo\n",
"y la precipitación acumulada en 30 días"
),
x = "Índice de humedad del suelo",
y = "Precipitación acumulada en 30 días (mm)"
) +
scale_x_continuous(
limits = c(0, 1),
breaks = seq(0, 1, by = 0.1),
expand = expansion(mult = 0, add = 0)
) +
scale_y_continuous(
limits = c(0, y_max_simplificado),
expand = expansion(mult = 0, add = 0)
) +
coord_cartesian(
xlim = c(0, 1),
ylim = c(0, y_max_simplificado),
expand = FALSE
) +
theme_bw(base_size = 14) +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
color = "#6D213C",
size = 17
),
plot.subtitle = element_text(
hjust = 0.5,
face = "bold",
size = 13,
lineheight = 1.1
),
axis.title = element_text(
face = "bold"
),
panel.grid.minor = element_blank()
)
Conjetura:
La distribución de los puntos muestra una curva ascendente. La precipitación acumulada aumenta de forma acelerada a medida que se incrementa el índice de humedad del suelo, lo que sugiere una relación no lineal de tipo exponencial.
Modelo exponencial general:
\[ Y = ae^{bX} \]
Modelo exponencial aplicado al estudio:
\[ \text{Precipitación}_{30d} = ae^{b(\text{Humedad del suelo})} \]
Y1 <- log(Y)
regresion_exponencial <- lm(
Y1 ~ X
)
beta0 <- unname(
coef(regresion_exponencial)[1]
)
beta1 <- unname(
coef(regresion_exponencial)[2]
)
a <- exp(beta0)
b <- beta1
Modelo exponencial obtenido:
\[ \widehat{Y} = 31.5237 e^{2.745244X} \]
El parámetro \(a\) representa la precipitación estimada cuando el índice de humedad del suelo es igual a cero. El parámetro \(b\) representa la tasa de crecimiento exponencial.
Justificación del uso de la regresión lineal (lm)
Aunque el modelo propuesto es exponencial, puede estimarse mediante
lm() porque se linealiza aplicando logaritmo natural.
Modelo original:
\[ Y = ae^{bX} \]
Al aplicar logaritmo natural:
\[ \ln(Y) = \ln(a) + bX \]
Definimos:
\[ Y_1 = \ln(Y), \qquad \beta_0 = \ln(a), \qquad \beta_1 = b \]
Se obtiene el modelo lineal:
\[ Y_1 = \beta_0 + \beta_1X \]
Después se aplica la transformación inversa para recuperar el modelo exponencial original.
X_curva <- seq(
0,
1,
length.out = 400
)
Y_curva <- a * exp(
b * X_curva
)
curva_modelo <- data.frame(
X = X_curva,
Y = Y_curva
)
y_max_modelo <- max(
c(
Y,
Y_curva
),
na.rm = TRUE
) * 1.05
ggplot() +
geom_point(
data = tabla_simplificada,
aes(
x = X,
y = Y
),
color = "#00A6D6",
alpha = 0.70,
size = 2
) +
geom_line(
data = curva_modelo,
aes(
x = X,
y = Y
),
color = "red",
linewidth = 1.5
) +
labs(
title = "Gráfica Nro. 3",
subtitle = paste0(
"Modelo exponencial entre el índice de humedad del suelo\n",
"y la precipitación acumulada en 30 días"
),
x = "Índice de humedad del suelo",
y = "Precipitación acumulada en 30 días (mm)"
) +
scale_x_continuous(
limits = c(0, 1),
breaks = seq(0, 1, by = 0.1),
expand = expansion(mult = 0, add = 0)
) +
scale_y_continuous(
limits = c(0, y_max_modelo),
expand = expansion(mult = 0, add = 0)
) +
coord_cartesian(
xlim = c(0, 1),
ylim = c(0, y_max_modelo),
expand = FALSE
) +
theme_bw(base_size = 14) +
theme(
plot.title = element_text(
hjust = 0.5,
face = "bold",
color = "#6D213C",
size = 17
),
plot.subtitle = element_text(
hjust = 0.5,
face = "bold",
size = 13,
lineheight = 1.1
),
axis.title = element_text(
face = "bold"
),
panel.grid.minor = element_blank(),
legend.position = "none"
)
r <- cor(
X,
Y1
) * 100
cat(
"Coeficiente de correlación =",
round(r, 4),
"%"
)
## Coeficiente de correlación = 97.3443 %
El coeficiente de correlación es de 97.34 %, lo que indica una relación positiva fuerte entre el índice de humedad del suelo y el logaritmo de la precipitación. Por tanto, el modelo exponencial presenta un buen ajuste a los datos promediados.
Dominios físicos de las variables:
\[ D_X = \left\{ X\in\mathbb{R}: 0\leq X\leq1 \right\} \]
\[ D_Y = \left\{ Y\in\mathbb{R}: Y\geq0 \right\} \]
Pregunta: ¿Existe algún valor del dominio de \(X\) que, al sustituirse en el modelo matemático, genere un valor de \(Y\) fuera de su dominio?
Respuesta: No.
No existen restricciones dentro del dominio físico analizado, porque \(a>0\) y la función exponencial siempre genera valores positivos. Por tanto, todo valor de \(X\) entre 0 y 1 produce una precipitación estimada mayor que cero.
humedad_cantidad <- 0.80
precipitacion_cantidad <- a * exp(
b * humedad_cantidad
)
humedad_inicial <- 0.50
humedad_final <- 0.80
precipitacion_inicial <- a * exp(
b * humedad_inicial
)
precipitacion_final <- a * exp(
b * humedad_final
)
incremento_porcentaje <- (
(
precipitacion_final -
precipitacion_inicial
) /
precipitacion_inicial
) * 100
Pregunta de cantidad
¿Cuál es la precipitación acumulada esperada en 30 días cuando el índice de humedad del suelo es 0.80?
Resultado: 283.42 mm
Pregunta de porcentaje
¿En qué porcentaje aumenta la precipitación acumulada esperada cuando el índice de humedad del suelo aumenta de 0.50 a 0.80?
Resultado: 127.86 %
En conclusión:
Entre el índice de humedad del suelo y la precipitación acumulada en 30 días existe una relación de tipo exponencial, representada por el modelo Y = 31.5237e2.745244X . No se identifican restricciones dentro del dominio físico analizado. El modelo indica que la precipitación acumulada aumenta de forma acelerada a medida que se incrementa el índice de humedad del suelo.