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

ANÁLISIS ESTADÍSTICO DE DESLIZAMIENTOS

Modelo 4: Regresión Logarítmica

Este modelo evalúa una relación logarítmica entre la precipitación acumulada en 7 días y el área afectada del deslizamiento.

MODELO 4: REGRESIÓN LOGARÍTMICA

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),
    "Precipitación acumulada en 7 días",
    "Área afectada del deslizamiento"
  )
)

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 Precipitación acumulada en 7 días
Variable dependiente Y Área afectada del deslizamiento

2. SELECCIÓN DE VARIABLES

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

datos_regresion <- data.frame(
  precipitation_7d_mm = limpiar_numerico(datos$precipitation_7d_mm),
  area_affected_m2 = limpiar_numerico(datos$area_affected_m2),
  terrain_slope_deg = limpiar_numerico(datos$terrain_slope_deg),
  latitude = limpiar_numerico(datos$latitude),
  longitude = limpiar_numerico(datos$longitude),
  landslide_category = datos$landslide_category,
  landslide_size = datos$landslide_size
)

datos_regresion <- datos_regresion[
  is.finite(datos_regresion$precipitation_7d_mm) &
    is.finite(datos_regresion$area_affected_m2) &
    datos_regresion$precipitation_7d_mm > 0 &
    datos_regresion$area_affected_m2 > 0,
]

x <- datos_regresion$precipitation_7d_mm
y <- datos_regresion$area_affected_m2

tabla_variables <- data.frame(
  Variable = c(
    "X",
    "Y",
    "Variable complementaria",
    "Variable complementaria",
    "Variable complementaria",
    "Variable categórica complementaria",
    "Variable categórica complementaria"
  ),
  Nombre_en_dataset = c(
    "precipitation_7d_mm",
    "area_affected_m2",
    "terrain_slope_deg",
    "latitude",
    "longitude",
    "landslide_category",
    "landslide_size"
  ),
  Descripcion = c(
    "Precipitación acumulada en 7 días",
    "Área afectada del deslizamiento como representación numérica del tamaño",
    "Pendiente del terreno",
    "Latitud del evento",
    "Longitud del evento",
    "Categoría del deslizamiento",
    "Tamaño categórico del deslizamiento"
  ),
  Uso_en_modelo = c(
    "Variable independiente",
    "Variable dependiente",
    "Variable considerada para Machine Learning",
    "Variable considerada para Machine Learning",
    "Variable considerada para Machine Learning",
    "Variable considerada para Machine Learning",
    "Variable considerada para Machine Learning"
  )
)

knitr::kable(
  tabla_variables,
  caption = "Variables consideradas para el modelo logarítmico y para Machine Learning"
)
Variables consideradas para el modelo logarítmico y para Machine Learning
Variable Nombre_en_dataset Descripcion Uso_en_modelo
X precipitation_7d_mm Precipitación acumulada en 7 días Variable independiente
Y area_affected_m2 Área afectada del deslizamiento como representación numérica del tamaño Variable dependiente
Variable complementaria terrain_slope_deg Pendiente del terreno Variable considerada para Machine Learning
Variable complementaria latitude Latitud del evento Variable considerada para Machine Learning
Variable complementaria longitude Longitud del evento Variable considerada para Machine Learning
Variable categórica complementaria landslide_category Categoría del deslizamiento Variable considerada para Machine Learning
Variable categórica complementaria landslide_size Tamaño categórico del deslizamiento Variable considerada para Machine Learning

3. TABLA DE PARES DE VALORES

tabla_pares <- data.frame(
  Precipitacion_7_dias_mm = x,
  Area_afectada_m2 = y
)

knitr::kable(
  head(tabla_pares, 10),
  digits = 4,
  caption = "Primeros diez pares de valores utilizados en el modelo logarítmico"
)
Primeros diez pares de valores utilizados en el modelo logarítmico
Precipitacion_7_dias_mm Area_afectada_m2
60.21 1879.8
115.77 2183.0
47.14 784.5
52.52 1815.4
12.51 1399.4
84.97 2568.7
121.28 2725.3
83.39 2167.9
93.87 1983.9
105.27 1835.7
resumen_variables <- data.frame(
  Variable = c("Precipitación acumulada 7 días", "Área afectada"),
  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
Precipitación acumulada 7 días 0.5 71.91 62.74 507.07
Área afectada 198.6 2366.48 1827.90 62703.70

4. GRÁFICA ORIGINAL: NUBE DE PUNTOS

ggplot(
  datos_regresion,
  aes(
    x = precipitation_7d_mm,
    y = area_affected_m2
  )
) +
  geom_point(
    color = "blue",
    alpha = 0.30,
    size = 1.7
  ) +
  labs(
    title = "REGRESIÓN LOGARÍTMICA",
    subtitle = "Nube de puntos entre precipitación acumulada y área afectada",
    x = "Precipitación acumulada en 7 días (mm)",
    y = "Área afectada del deslizamiento (m²)"
  ) +
  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 la precipitación acumulada en 7 días, el área afectada del deslizamiento tiende a incrementarse de forma no lineal. Por ello se propone un modelo logarítmico.

La estructura matemática del modelo logarítmico es:

\[ \hat{y} = a + b\ln(x) \]

Donde:

  • \(\hat{y}\) = área afectada estimada del deslizamiento.
  • \(x\) = precipitación acumulada en 7 días.
  • \(a\) = intercepto del modelo.
  • \(b\) = coeficiente asociado al logaritmo natural de \(x\).
  • \(\ln(x)\) = logaritmo natural de la variable independiente.

6. CÁLCULO DE PARÁMETROS DEL MODELO

modelo_logaritmico <- lm(
  area_affected_m2 ~ log(precipitation_7d_mm),
  data = datos_regresion
)

parametros <- coef(modelo_logaritmico)

intercepto <- as.numeric(parametros[1])
pendiente_log <- as.numeric(parametros[2])

y_estimado <- predict(modelo_logaritmico)

r_cuadrado <- summary(modelo_logaritmico)$r.squared

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

tabla_modelo <- data.frame(
  Parametro = c("a", "b", "R²", "RMSE"),
  Valor = c(intercepto, pendiente_log, r_cuadrado, rmse),
  Interpretacion = c(
    "Intercepto del modelo logarítmico",
    "Cambio estimado del área afectada respecto al logaritmo natural de la precipitación",
    "Proporción de variabilidad explicada por el modelo",
    "Error promedio aproximado del modelo"
  )
)

knitr::kable(
  tabla_modelo,
  digits = 4,
  caption = "Parámetros principales del modelo logarítmico"
)
Parámetros principales del modelo logarítmico
Parametro Valor Interpretacion
a -3065.3291 Intercepto del modelo logarítmico
b 1341.3636 Cambio estimado del área afectada respecto al logaritmo natural de la precipitación
0.2213 Proporción de variabilidad explicada por el modelo
RMSE 1884.8200 Error promedio aproximado del modelo

Resultado del modelo logarítmico

Ecuación logarítmica

Y = a + b * ln(x)

Y = -3065.33 + 1341.36 * ln(x)

R² = 0.2213

El modelo explica aproximadamente 22.13% de la variabilidad observada en el área afectada del deslizamiento.

RMSE = 1884.82 m²

tabla_coeficientes <- as.data.frame(coef(summary(modelo_logaritmico)))

tabla_coeficientes$Parametro <- rownames(tabla_coeficientes)

rownames(tabla_coeficientes) <- NULL

tabla_coeficientes <- tabla_coeficientes[
  ,
  c(
    "Parametro",
    "Estimate",
    "Std. Error",
    "t value",
    "Pr(>|t|)"
  )
]

knitr::kable(
  tabla_coeficientes,
  digits = 4,
  caption = "Resumen de coeficientes del modelo logarítmico"
)
Resumen de coeficientes del modelo logarítmico
Parametro Estimate Std. Error t value Pr(>|t|)
(Intercept) -3065.329 98.6547 -31.0713 0
log(precipitation_7d_mm) 1341.364 23.9559 55.9930 0

7. CURVA LOGARÍTMICA SOBRE LA NUBE DE PUNTOS

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

curva_logaritmica <- data.frame(
  precipitation_7d_mm = x_secuencia,
  area_estimada = intercepto + pendiente_log * log(x_secuencia)
)

if (pendiente_log >= 0) {
  ecuacion_texto <- paste0(
    "y = ",
    round(intercepto, 2),
    " + ",
    round(pendiente_log, 2),
    "ln(x)   |   R² = ",
    round(r_cuadrado, 3)
  )
} else {
  ecuacion_texto <- paste0(
    "y = ",
    round(intercepto, 2),
    " - ",
    abs(round(pendiente_log, 2)),
    "ln(x)   |   R² = ",
    round(r_cuadrado, 3)
  )
}

ggplot() +
  geom_point(
    data = datos_regresion,
    aes(
      x = precipitation_7d_mm,
      y = area_affected_m2
    ),
    color = "blue",
    alpha = 0.30,
    size = 1.7
  ) +
  geom_line(
    data = curva_logaritmica,
    aes(
      x = precipitation_7d_mm,
      y = area_estimada
    ),
    color = "red",
    linewidth = 1.5
  ) +
  labs(
    title = "REGRESIÓN LOGARÍTMICA",
    subtitle = ecuacion_texto,
    x = "Precipitación acumulada en 7 días (mm)",
    y = "Área afectada del deslizamiento (m²)"
  ) +
  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 logarítmica",
    "Significancia estadística de la relación observada-estimada",
    "Variabilidad explicada por el modelo logarítmico",
    "Error promedio aproximado del modelo en metros cuadrados"
  )
)

knitr::kable(
  tabla_evaluacion,
  caption = "Evaluación del modelo logarítmico"
)
Evaluación del modelo logarítmico
Indicador Valor Interpretacion
Coeficiente de Pearson 0.4704 Relación entre los valores observados y los valores estimados por la curva logarítmica
p-value < 0.00000000000000022 Significancia estadística de la relación observada-estimada
0.2213 Variabilidad explicada por el modelo logarítmico
RMSE 1884.82 Error promedio aproximado del modelo en metros cuadrados

Test de evaluación del modelo logarítmico

Coeficiente de Pearson observado-estimado: r = 0.4704

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 logarítmico fue construido con valores observados de precipitación acumulada en 7 días entre x = 0.5 mm y x = 507.07 mm.

Además, para aplicar el logaritmo natural se requiere que la variable independiente sea mayor que cero. En este caso, el área afectada mínima observada fue 198.6 m².

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 LOGARÍTMICO

valor_propuesto <- median(x)

if (
  valor_propuesto < min_precipitacion ||
  valor_propuesto > max_precipitacion
) {
  
  valor_estimado <- median(x)
  
  observacion_estimacion <- paste(
    "El valor propuesto está fuera del rango observado.",
    "Se usó la mediana de la precipitación acumulada en 7 días para la demostración."
  )
  
} else {
  
  valor_estimado <- valor_propuesto
  
  observacion_estimacion <- "El valor propuesto está dentro del rango observado."
}

nuevo_evento <- data.frame(
  precipitation_7d_mm = valor_estimado
)

estimacion <- predict(
  modelo_logaritmico,
  newdata = nuevo_evento,
  interval = "prediction",
  level = 0.95
)

area_estimada <- estimacion[1, "fit"]
limite_inferior <- max(0, estimacion[1, "lwr"])
limite_superior <- estimacion[1, "upr"]

tabla_estimacion <- data.frame(
  Precipitacion_7_dias_mm = valor_estimado,
  Area_afectada_estimada_m2 = area_estimada,
  Limite_inferior_95 = limite_inferior,
  Limite_superior_95 = limite_superior
)

knitr::kable(
  tabla_estimacion,
  digits = 2,
  caption = "Pronóstico generado por el modelo logarítmico"
)
Pronóstico generado por el modelo logarítmico
Precipitacion_7_dias_mm Area_afectada_estimada_m2 Limite_inferior_95 Limite_superior_95
62.74 2486.57 0 6181.66

Pronóstico del modelo logarítmico

Para una precipitación acumulada en 7 días de:

62.74 mm

El área afectada estimada del deslizamiento es:

2486.57 m²

Intervalo de predicción 95%:
0 m² a 6181.66 m²

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

10. CONCLUSIÓN DEL MODELO

Conclusión del modelo logarítmico

El modelo permitió evaluar la relación entre la precipitación acumulada en 7 días y el área afectada del deslizamiento mediante una función logarítmica.

El parámetro b = 1341.364, 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.47, con un p-value = < 0.00000000000000022. La relación observada-estimada resultó estadísticamente significativa.

El modelo explica aproximadamente 22.13% de la variabilidad del área afectada del deslizamiento.

Su uso debe limitarse al rango observado de precipitación acumulada y entenderse como una asociación estadística, no como una causalidad absoluta.

FIN DEL MODELO

Modelo finalizado

La regresión logarítmica fue desarrollada usando como variable independiente la precipitación acumulada en 7 días y como variable dependiente el área afectada del deslizamiento. La representación visual principal corresponde a la curva logarítmica ajustada sobre la nube de puntos en la escala original de los datos.