MODELO EXPONENCIAL

0.- Carga de Librerías

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

1.- Carga de Datos

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

2.- Definición de variables

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:

  • X = índice de humedad del suelo.
  • Y = precipitación acumulada en 30 días.
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

3.- Tabla pares de valores

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"
  )
)
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

4.- Gráfica de Dispersión

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()
  )

5.- Tratamiento de datos

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

5.1.- Tabla pares de valores simplificada

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"
  )
)
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

5.2.- Gráfica de dispersión simplificada

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()
  )

6.- Conjetura

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})} \]

7.- Parámetros

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.

8.- Comparación de la realidad con el modelo

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"
  )

9.- Test de Bondad

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.

10.- Restricciones

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.

11.- Estimación

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 %

12.- Conclusión

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.