Inicio Datos Tabla Dispersión Modelo Curva Evaluación Restricciones Pronóstico Conclusión

ANÁLISIS ESTADÍSTICO DE DESLIZAMIENTOS

Modelo 2: Regresión Exponencial

Este modelo evalúa una relación de crecimiento exponencial entre el índice de humedad del suelo y la precipitación acumulada en 30 días.

MODELO 2: REGRESIÓN EXPONENCIAL

1. LIBRERÍAS Y CARGA DEL DATASET

library(readxl)
library(ggplot2)
library(knitr)

datos <- read_excel("dataset_landslides.xlsx", sheet = "Dataset_landslides")

datos <- as.data.frame(datos)

options(scipen = 999)

resumen_dataset <- data.frame(
  Elemento = c(
    "Archivo utilizado",
    "Hoja utilizada",
    "Número de filas",
    "Número de columnas",
    "Variable independiente X",
    "Variable dependiente Y"
  ),
  Descripcion = c(
    "dataset_landslides.xlsx",
    "Dataset_landslides",
    nrow(datos),
    ncol(datos),
    "Índice de humedad del suelo",
    "Precipitación acumulada en 30 días"
  )
)

knitr::kable(
  resumen_dataset,
  caption = "Resumen inicial del dataset"
)
Resumen inicial del dataset
Elemento Descripcion
Archivo utilizado dataset_landslides.xlsx
Hoja utilizada Dataset_landslides
Número de filas 11033
Número de columnas 25
Variable independiente X Índice de humedad del suelo
Variable dependiente Y Precipitación acumulada en 30 días

2. SELECCIÓN DE VARIABLES

limpiar_numerico <- function(variable) {
  variable <- as.character(variable)
  variable <- gsub(",", ".", variable)
  as.numeric(variable)
}

datos_regresion <- data.frame(
  soil_moisture_index = limpiar_numerico(datos$soil_moisture_index),
  precipitation_30d_mm = limpiar_numerico(datos$precipitation_30d_mm)
)

datos_regresion <- datos_regresion[
  is.finite(datos_regresion$soil_moisture_index) &
    is.finite(datos_regresion$precipitation_30d_mm) &
    datos_regresion$precipitation_30d_mm > 0,
]

x <- datos_regresion$soil_moisture_index
y <- datos_regresion$precipitation_30d_mm

tabla_variables <- data.frame(
  Variable = c("X", "Y"),
  Nombre_en_dataset = c(
    "soil_moisture_index",
    "precipitation_30d_mm"
  ),
  Descripcion = c(
    "Índice de humedad del suelo",
    "Precipitación acumulada en 30 días"
  ),
  Unidad = c("Índice", "mm")
)

knitr::kable(
  tabla_variables,
  caption = "Variables seleccionadas para el modelo exponencial"
)
Variables seleccionadas para el modelo exponencial
Variable Nombre_en_dataset Descripcion Unidad
X soil_moisture_index Índice de humedad del suelo Índice
Y precipitation_30d_mm Precipitación acumulada en 30 días mm

3. TABLA DE PARES DE VALORES

tabla_pares <- data.frame(
  Indice_humedad_suelo = x,
  Precipitacion_30_dias_mm = y
)

knitr::kable(
  head(tabla_pares, 10),
  digits = 4,
  caption = "Primeros diez pares de valores utilizados en el modelo exponencial"
)
Primeros diez pares de valores utilizados en el modelo exponencial
Indice_humedad_suelo Precipitacion_30_dias_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
resumen_variables <- data.frame(
  Variable = c("Índice de humedad del suelo", "Precipitación acumulada 30 días"),
  Minimo = c(min(x), min(y)),
  Media = c(mean(x), mean(y)),
  Mediana = c(median(x), median(y)),
  Maximo = c(max(x), max(y))
)

knitr::kable(
  resumen_variables,
  digits = 2,
  caption = "Resumen estadístico de las variables"
)
Resumen estadístico de las variables
Variable Minimo Media Mediana Maximo
Índice de humedad del suelo 0.10 0.73 0.77 1
Precipitación acumulada 30 días 7.62 289.44 242.06 1500

4. GRÁFICA ORIGINAL: NUBE DE PUNTOS

ggplot(
  datos_regresion,
  aes(
    x = soil_moisture_index,
    y = precipitation_30d_mm
  )
) +
  geom_point(
    color = "blue",
    alpha = 0.28,
    size = 1.7
  ) +
  labs(
    title = "REGRESIÓN EXPONENCIAL",
    subtitle = "Nube de puntos entre humedad del suelo y precipitación acumulada en 30 días",
    x = "Índice de humedad del suelo",
    y = "Precipitación acumulada en 30 días (mm)"
  ) +
  theme_bw(base_size = 15) +
  theme(
    plot.title = element_text(
      hjust = 0.5,
      face = "bold",
      size = 26,
      color = "#0B3C5D"
    ),
    plot.subtitle = element_text(
      hjust = 0.5,
      size = 13,
      color = "#444444"
    ),
    axis.title = element_text(
      face = "bold",
      size = 13
    ),
    axis.text = element_text(
      size = 11
    ),
    panel.border = element_rect(
      color = "gray35",
      fill = NA,
      linewidth = 1
    ),
    panel.grid.major = element_line(
      color = "gray88"
    ),
    panel.grid.minor = element_blank(),
    plot.background = element_rect(
      fill = "white",
      color = NA
    ),
    panel.background = element_rect(
      fill = "white",
      color = NA
    )
  )

5. CONJETURA Y ESTRUCTURA MATEMÁTICA

Conjetura del modelo

A medida que aumenta el índice de humedad del suelo, la precipitación acumulada en 30 días presenta un crecimiento no lineal, por lo que se propone un modelo de tipo exponencial.

La estructura matemática del modelo exponencial es:

\[ \hat{y} = ae^{bx} \]

Donde:

  • \(\hat{y}\) = precipitación acumulada estimada en 30 días.
  • \(x\) = índice de humedad del suelo.
  • \(a\) = parámetro inicial del modelo.
  • \(b\) = tasa de crecimiento exponencial.
  • \(e\) = base del logaritmo natural.

6. CÁLCULO DE PARÁMETROS DEL MODELO

q_inf <- as.numeric(quantile(x, 0.10))
q_sup <- as.numeric(quantile(x, 0.90))

y_inf <- median(y[x <= q_inf])
y_sup <- median(y[x >= q_sup])

b_inicio <- log(y_sup / y_inf) / (q_sup - q_inf)
a_inicio <- y_inf / exp(b_inicio * q_inf)

modelo_exponencial <- nls(
  precipitation_30d_mm ~ a * exp(b * soil_moisture_index),
  data = datos_regresion,
  start = list(
    a = a_inicio,
    b = b_inicio
  ),
  control = nls.control(
    maxiter = 500,
    warnOnly = TRUE
  )
)

parametros <- coef(modelo_exponencial)

a_exponencial <- as.numeric(parametros["a"])
b_exponencial <- as.numeric(parametros["b"])

y_estimado <- predict(modelo_exponencial)

sse <- sum((y - y_estimado)^2)
sst <- sum((y - mean(y))^2)
r_cuadrado <- 1 - (sse / sst)

rmse <- sqrt(mean((y - y_estimado)^2))

tabla_modelo <- data.frame(
  Parametro = c("a", "b", "R²", "RMSE"),
  Valor = c(a_exponencial, b_exponencial, r_cuadrado, rmse),
  Interpretacion = c(
    "Valor inicial del modelo exponencial",
    "Tasa de crecimiento exponencial",
    "Proporción de variabilidad explicada por el modelo en la escala original",
    "Error promedio aproximado del modelo"
  )
)

knitr::kable(
  tabla_modelo,
  digits = 4,
  caption = "Parámetros principales del modelo exponencial"
)
Parámetros principales del modelo exponencial
Parametro Valor Interpretacion
a 11.7921 Valor inicial del modelo exponencial
b 3.9334 Tasa de crecimiento exponencial
0.7697 Proporción de variabilidad explicada por el modelo en la escala original
RMSE 93.2311 Error promedio aproximado del modelo

Resultado del modelo exponencial

Ecuación exponencial

Y = a * e(b * x)

Y = 11.79 * e(3.9334 * x)

R² = 0.7697

El modelo explica aproximadamente 76.97% de la variabilidad observada en la precipitación acumulada.

RMSE = 93.23 mm

tabla_coeficientes <- data.frame(
  Parametro = c("a", "b"),
  Valor = c(a_exponencial, b_exponencial),
  Significado = c(
    "Coeficiente inicial de la curva exponencial",
    "Tasa de crecimiento de la curva exponencial"
  )
)

knitr::kable(
  tabla_coeficientes,
  digits = 4,
  caption = "Coeficientes del modelo exponencial directo"
)
Coeficientes del modelo exponencial directo
Parametro Valor Significado
a 11.7921 Coeficiente inicial de la curva exponencial
b 3.9334 Tasa de crecimiento de la curva exponencial

7. CURVA EXPONENCIAL SOBRE LA NUBE DE PUNTOS

x_secuencia <- seq(
  min(x),
  max(x),
  length.out = 300
)

curva_exponencial <- data.frame(
  soil_moisture_index = x_secuencia,
  precipitacion_estimada = a_exponencial * exp(b_exponencial * x_secuencia)
)

ecuacion_texto <- paste0(
  "y = ",
  round(a_exponencial, 4),
  "e^(",
  round(b_exponencial, 4),
  "x)   |   R² = ",
  round(r_cuadrado, 3)
)

ggplot() +
  geom_point(
    data = datos_regresion,
    aes(
      x = soil_moisture_index,
      y = precipitation_30d_mm
    ),
    color = "blue",
    alpha = 0.28,
    size = 1.7
  ) +
  geom_line(
    data = curva_exponencial,
    aes(
      x = soil_moisture_index,
      y = precipitacion_estimada
    ),
    color = "red",
    linewidth = 1.5
  ) +
  labs(
    title = "REGRESIÓN EXPONENCIAL",
    subtitle = ecuacion_texto,
    x = "Índice de humedad del suelo",
    y = "Precipitación acumulada en 30 días (mm)"
  ) +
  theme_bw(base_size = 15) +
  theme(
    plot.title = element_text(
      hjust = 0.5,
      face = "bold",
      size = 26,
      color = "#0B3C5D"
    ),
    plot.subtitle = element_text(
      hjust = 0.5,
      face = "bold",
      size = 13,
      color = "#222222"
    ),
    axis.title = element_text(
      face = "bold",
      size = 13
    ),
    axis.text = element_text(
      size = 11
    ),
    panel.border = element_rect(
      color = "gray35",
      fill = NA,
      linewidth = 1
    ),
    panel.grid.major = element_line(
      color = "gray88"
    ),
    panel.grid.minor = element_blank(),
    plot.background = element_rect(
      fill = "white",
      color = NA
    ),
    panel.background = element_rect(
      fill = "white",
      color = NA
    )
  )

8. EVALUACIÓN DEL MODELO

pearson_modelo <- cor.test(
  y,
  y_estimado,
  method = "pearson"
)

r_pearson <- as.numeric(pearson_modelo$estimate)
p_valor <- pearson_modelo$p.value

tabla_evaluacion <- data.frame(
  Indicador = c(
    "Coeficiente de Pearson",
    "p-value",
    "R²",
    "RMSE"
  ),
  Valor = c(
    round(r_pearson, 4),
    format.pval(p_valor, digits = 4),
    round(r_cuadrado, 4),
    round(rmse, 2)
  ),
  Interpretacion = c(
    "Relación entre los valores observados y los valores estimados por la curva exponencial",
    "Significancia estadística de la relación observada-estimada",
    "Variabilidad explicada por el modelo en la escala original",
    "Error promedio aproximado del modelo en milímetros"
  )
)

knitr::kable(
  tabla_evaluacion,
  caption = "Evaluación del modelo exponencial"
)
Evaluación del modelo exponencial
Indicador Valor Interpretacion
Coeficiente de Pearson 0.8811 Relación entre los valores observados y los valores estimados por la curva exponencial
p-value < 0.00000000000000022 Significancia estadística de la relación observada-estimada
0.7697 Variabilidad explicada por el modelo en la escala original
RMSE 93.23 Error promedio aproximado del modelo en milímetros

Test de evaluación del modelo exponencial

Coeficiente de Pearson observado-estimado: r = 0.8811

p-value: < 0.00000000000000022

Con un nivel de significancia de 0.05, la relación entre los valores observados y los valores estimados por el modelo es estadísticamente significativa.

8.1. RESTRICCIONES DEL MODELO

Restricciones del modelo

Sí existe restricción matemática y estadística, ya que el modelo exponencial fue construido con valores observados del índice de humedad del suelo entre x = 0.1 y x = 1.

Además, la variable dependiente debe ser positiva, porque el modelo exponencial estima valores de crecimiento mayores que cero. En este caso, la precipitación acumulada mínima observada fue 7.62 mm.

Al introducir valores fuera del rango observado, el modelo puede generar predicciones poco consistentes, debido a que estaría realizando una extrapolación fuera de los datos analizados.

9. PRONÓSTICO DEL MODELO EXPONENCIAL

valor_propuesto <- median(x)

if (
  valor_propuesto < min_humedad ||
  valor_propuesto > max_humedad
) {
  
  valor_estimado <- median(x)
  
  observacion_estimacion <- paste(
    "El valor propuesto está fuera del rango observado.",
    "Se usó la mediana del índice de humedad del suelo para la demostración."
  )
  
} else {
  
  valor_estimado <- valor_propuesto
  
  observacion_estimacion <- "El valor propuesto está dentro del rango observado."
}

nuevo_evento <- data.frame(
  soil_moisture_index = valor_estimado
)

precipitacion_estimada <- predict(
  modelo_exponencial,
  newdata = nuevo_evento
)

limite_inferior <- max(0, precipitacion_estimada - 1.96 * rmse)
limite_superior <- precipitacion_estimada + 1.96 * rmse

tabla_estimacion <- data.frame(
  Indice_humedad_suelo = valor_estimado,
  Precipitacion_estimada_30d_mm = precipitacion_estimada,
  Limite_inferior_aproximado = limite_inferior,
  Limite_superior_aproximado = limite_superior
)

knitr::kable(
  tabla_estimacion,
  digits = 2,
  caption = "Pronóstico generado por el modelo exponencial"
)
Pronóstico generado por el modelo exponencial
Indice_humedad_suelo Precipitacion_estimada_30d_mm Limite_inferior_aproximado Limite_superior_aproximado
0.77 246.36 63.63 429.09

Pronóstico del modelo exponencial

Para un índice de humedad del suelo de:

0.77

La precipitación acumulada estimada en 30 días es:

246.36 mm

Rango aproximado:
63.63 mm a 429.09 mm

Observación: El valor propuesto está dentro del rango observado.

10. CONCLUSIÓN DEL MODELO

Conclusión del modelo exponencial

El modelo permitió evaluar la relación entre el índice de humedad del suelo y la precipitación acumulada en 30 días mediante una función exponencial directa.

El parámetro b = 3.9334, por lo que la relación estimada es positiva creciente.

El coeficiente de Pearson entre los valores observados y los valores estimados fue r = 0.881, con un p-value = < 0.00000000000000022. La relación observada-estimada resultó estadísticamente significativa.

El modelo explica aproximadamente 76.97% de la variabilidad de la precipitación acumulada en 30 días.

Su uso debe limitarse al rango observado del índice de humedad del suelo y entenderse como una asociación estadística, no como una causalidad absoluta.

FIN DEL MODELO

Modelo finalizado

La regresión exponencial fue desarrollada usando como variable independiente el índice de humedad del suelo y como variable dependiente la precipitación acumulada en 30 días. La representación visual principal corresponde a la curva exponencial ajustada sobre la nube de puntos en la escala original de los datos.