MODELO 1: REGRESIÓN LINEAL SIMPLE
# =========================================================
# PROYECTO DE REGRESIONES
# MODELO 1: REGRESIÓN LINEAL SIMPLE
# X = Precipitación acumulada en 7 días
# Y = Área afectada por deslizamientos
# =========================================================
# =========================================================
1. LIBRERÍAS Y CARGA DEL DATASET
# 1. LIBRERÍAS Y CARGA DEL DATASET
# =========================================================
# Para este modelo se usarán funciones base de R.
# No se requieren librerías adicionales.
# Evita la notación científica en números grandes
options(scipen = 999)
# Cargar dataset complementario
datos <- read.csv(
"dataset_landslides_modelado.csv",
fileEncoding = "UTF-8-BOM",
stringsAsFactors = FALSE,
na.strings = c("", "NA")
)
# Verificación inicial del dataset
head(datos)
## event_id event_date event_year event_month country_name country_code
## 1 684 2008-08-01 2008 8 China CN
## 2 956 2009-01-02 2009 1 United States US
## 3 973 2007-01-19 2007 1 Peru PE
## 4 1067 2009-07-31 2009 7 Nepal NP
## 5 2603 2010-10-16 2010 10 Philippines PH
## 6 4203 2012-02-16 2012 2 Philippines PH
## landslide_category landslide_trigger landslide_size landslide_setting
## 1 landslide rain large mine
## 2 mudslide downpour small unknown
## 3 landslide downpour large unknown
## 4 landslide monsoon medium unknown
## 5 landslide tropical_cyclone medium unknown
## 6 landslide downpour medium unknown
## fatality_count_observed longitude latitude precipitation_7d_mm_synthetic
## 1 11 107.4500 32.5625 60.21
## 2 0 -122.6630 45.4200 115.77
## 3 10 -75.3587 -11.1295 47.14
## 4 1 81.7080 28.8378 52.52
## 5 0 123.8978 10.3336 12.51
## 6 0 124.9668 10.7004 84.97
## precipitation_30d_mm_synthetic terrain_slope_deg_synthetic
## 1 228.20 28.14
## 2 326.56 33.00
## 3 207.24 19.77
## 4 229.48 22.85
## 5 64.64 15.65
## 6 396.80 23.76
## elevation_m_synthetic distance_to_road_km_synthetic
## 1 2431.8 22.544
## 2 1357.9 0.863
## 3 1564.0 1.081
## 4 1500.8 0.401
## 5 1069.9 2.708
## 6 2024.7 1.110
## population_density_km2_synthetic soil_moisture_index_synthetic
## 1 4.3 0.6991
## 2 45.4 0.9316
## 3 17.3 0.8163
## 4 6.1 0.8226
## 5 704.9 0.5915
## 6 7.5 0.9407
## land_cover_risk_index_synthetic area_affected_m2_synthetic
## 1 53.96 1879.8
## 2 67.17 2183.0
## 3 68.85 784.5
## 4 52.53 1815.4
## 5 47.25 1399.4
## 6 63.35 2568.7
## susceptibility_index_synthetic event_impact_score_synthetic
## 1 83.27 44.03
## 2 93.48 56.96
## 3 87.15 39.25
## 4 74.52 25.51
## 5 37.58 38.82
## 6 89.74 53.81
## fatality_risk_probability_synthetic fatality_count_simulated
## 1 0.0332 0
## 2 0.1648 0
## 3 0.0308 0
## 4 0.0318 0
## 5 0.0212 0
## 6 0.0671 0
## fatal_event_simulated severity_class_simulated
## 1 no sin_fallecidos
## 2 no sin_fallecidos
## 3 no sin_fallecidos
## 4 no sin_fallecidos
## 5 no sin_fallecidos
## 6 no sin_fallecidos
## dataset_note
## 1 Variables con sufijo _synthetic son simuladas para fines académicos
## 2 Variables con sufijo _synthetic son simuladas para fines académicos
## 3 Variables con sufijo _synthetic son simuladas para fines académicos
## 4 Variables con sufijo _synthetic son simuladas para fines académicos
## 5 Variables con sufijo _synthetic son simuladas para fines académicos
## 6 Variables con sufijo _synthetic son simuladas para fines académicos
dim(datos)
## [1] 11033 29
names(datos)
## [1] "event_id" "event_date"
## [3] "event_year" "event_month"
## [5] "country_name" "country_code"
## [7] "landslide_category" "landslide_trigger"
## [9] "landslide_size" "landslide_setting"
## [11] "fatality_count_observed" "longitude"
## [13] "latitude" "precipitation_7d_mm_synthetic"
## [15] "precipitation_30d_mm_synthetic" "terrain_slope_deg_synthetic"
## [17] "elevation_m_synthetic" "distance_to_road_km_synthetic"
## [19] "population_density_km2_synthetic" "soil_moisture_index_synthetic"
## [21] "land_cover_risk_index_synthetic" "area_affected_m2_synthetic"
## [23] "susceptibility_index_synthetic" "event_impact_score_synthetic"
## [25] "fatality_risk_probability_synthetic" "fatality_count_simulated"
## [27] "fatal_event_simulated" "severity_class_simulated"
## [29] "dataset_note"
str(datos)
## 'data.frame': 11033 obs. of 29 variables:
## $ event_id : int 684 956 973 1067 2603 4203 4290 225 236 873 ...
## $ event_date : chr "2008-08-01" "2009-01-02" "2007-01-19" "2009-07-31" ...
## $ event_year : int 2008 2009 2007 2009 2010 2012 2012 2007 2007 2008 ...
## $ event_month : int 8 1 1 7 10 2 3 9 9 11 ...
## $ country_name : chr "China" "United States" "Peru" "Nepal" ...
## $ country_code : chr "CN" "US" "PE" "NP" ...
## $ landslide_category : chr "landslide" "mudslide" "landslide" "landslide" ...
## $ landslide_trigger : chr "rain" "downpour" "downpour" "monsoon" ...
## $ landslide_size : chr "large" "small" "large" "medium" ...
## $ landslide_setting : chr "mine" "unknown" "unknown" "unknown" ...
## $ fatality_count_observed : int 11 0 10 1 0 0 0 3 NA 2 ...
## $ longitude : num 107.5 -122.7 -75.4 81.7 123.9 ...
## $ latitude : num 32.6 45.4 -11.1 28.8 10.3 ...
## $ precipitation_7d_mm_synthetic : num 60.2 115.8 47.1 52.5 12.5 ...
## $ precipitation_30d_mm_synthetic : num 228.2 326.6 207.2 229.5 64.6 ...
## $ terrain_slope_deg_synthetic : num 28.1 33 19.8 22.9 15.7 ...
## $ elevation_m_synthetic : num 2432 1358 1564 1501 1070 ...
## $ distance_to_road_km_synthetic : num 22.544 0.863 1.081 0.401 2.708 ...
## $ population_density_km2_synthetic : num 4.3 45.4 17.3 6.1 704.9 ...
## $ soil_moisture_index_synthetic : num 0.699 0.932 0.816 0.823 0.592 ...
## $ land_cover_risk_index_synthetic : num 54 67.2 68.8 52.5 47.2 ...
## $ area_affected_m2_synthetic : num 1880 2183 784 1815 1399 ...
## $ susceptibility_index_synthetic : num 83.3 93.5 87.2 74.5 37.6 ...
## $ event_impact_score_synthetic : num 44 57 39.2 25.5 38.8 ...
## $ fatality_risk_probability_synthetic: num 0.0332 0.1648 0.0308 0.0318 0.0212 ...
## $ fatality_count_simulated : int 0 0 0 0 0 0 0 0 0 0 ...
## $ fatal_event_simulated : chr "no" "no" "no" "no" ...
## $ severity_class_simulated : chr "sin_fallecidos" "sin_fallecidos" "sin_fallecidos" "sin_fallecidos" ...
## $ dataset_note : chr "Variables con sufijo _synthetic son simuladas para fines académicos" "Variables con sufijo _synthetic son simuladas para fines académicos" "Variables con sufijo _synthetic son simuladas para fines académicos" "Variables con sufijo _synthetic son simuladas para fines académicos" ...
# Verificar valores faltantes
colSums(is.na(datos))
## event_id event_date
## 0 0
## event_year event_month
## 0 0
## country_name country_code
## 1562 1564
## landslide_category landslide_trigger
## 1 23
## landslide_size landslide_setting
## 9 69
## fatality_count_observed longitude
## 1385 0
## latitude precipitation_7d_mm_synthetic
## 0 0
## precipitation_30d_mm_synthetic terrain_slope_deg_synthetic
## 0 0
## elevation_m_synthetic distance_to_road_km_synthetic
## 0 0
## population_density_km2_synthetic soil_moisture_index_synthetic
## 0 0
## land_cover_risk_index_synthetic area_affected_m2_synthetic
## 0 0
## susceptibility_index_synthetic event_impact_score_synthetic
## 0 0
## fatality_risk_probability_synthetic fatality_count_simulated
## 0 0
## fatal_event_simulated severity_class_simulated
## 0 0
## dataset_note
## 0
# =========================================================
2. SELECCIÓN DE DOS VARIABLES
# 2. SELECCIÓN DE DOS VARIABLES
# =========================================================
# Variable independiente o explicativa (X)
# Precipitación acumulada durante los 7 días previos al evento
x <- datos$precipitation_7d_mm_synthetic
# Variable dependiente o respuesta (Y)
# Área afectada por el deslizamiento
y <- datos$area_affected_m2_synthetic
# Comprobar que ambas variables sean numéricas
is.numeric(x)
## [1] TRUE
is.numeric(y)
## [1] TRUE
# Crear base específica para la regresión
datos_regresion <- data.frame(
precipitation_7d_mm_synthetic = x,
area_affected_m2_synthetic = y
)
# Eliminar valores faltantes, por seguridad
datos_regresion <- na.omit(datos_regresion)
# Actualizar X y Y con datos depurados
x <- datos_regresion$precipitation_7d_mm_synthetic
y <- datos_regresion$area_affected_m2_synthetic
# =========================================================
3. TABLA DE PARES DE VALORES
# 3. TABLA DE PARES DE VALORES
# =========================================================
tabla_pares <- data.frame(
Precipitacion_7_dias_mm = x,
Area_afectada_m2 = y
)
# Mostrar los primeros pares de valores
head(tabla_pares, 10)
## Precipitacion_7_dias_mm Area_afectada_m2
## 1 60.21 1879.8
## 2 115.77 2183.0
## 3 47.14 784.5
## 4 52.52 1815.4
## 5 12.51 1399.4
## 6 84.97 2568.7
## 7 121.28 2725.3
## 8 83.39 2167.9
## 9 93.87 1983.9
## 10 105.27 1835.7
# Resumen estadístico de ambas variables
summary(tabla_pares)
## Precipitacion_7_dias_mm Area_afectada_m2
## Min. : 0.50 Min. : 198.6
## 1st Qu.: 38.73 1st Qu.: 1204.0
## Median : 62.74 Median : 1827.9
## Mean : 71.91 Mean : 2366.5
## 3rd Qu.: 94.77 3rd Qu.: 2827.5
## Max. :507.07 Max. :62703.7
# Guardar tabla de pares, opcional
write.csv(
tabla_pares,
"tabla_pares_precipitacion_area.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# =========================================================
4. GRÁFICA: NUBE DE PUNTOS / DIAGRAMA DE
DISPERSIÓN
# 4. GRÁFICA: NUBE DE PUNTOS / DIAGRAMA DE DISPERSIÓN
# =========================================================
plot(
x,
y,
main = "Diagrama de dispersión: precipitación y área afectada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.12, 0.34, 0.72, 0.25),
cex = 0.7
)
grid()

# =========================================================
5. CONJETURA Y ESTRUCTURA MATEMÁTICA DEL
MODELO
# 5. CONJETURA Y ESTRUCTURA MATEMÁTICA DEL MODELO
# =========================================================
# Según la nube de puntos se propone una relación lineal positiva:
# a mayor precipitación acumulada, mayor área afectada estimada.
# Estructura matemática del modelo:
# y_estimado = a + b*x
#
# Donde:
# y_estimado = área afectada estimada en m²
# x = precipitación acumulada en 7 días en mm
# a = intercepto
# b = pendiente
# =========================================================
6. CÁLCULO DE PARÁMETROS DEL MODELO
# 6. CÁLCULO DE PARÁMETROS DEL MODELO
# =========================================================
modelo_lineal <- lm(
area_affected_m2_synthetic ~ precipitation_7d_mm_synthetic,
data = datos_regresion
)
# Resumen completo del modelo
summary(modelo_lineal)
##
## Call:
## lm(formula = area_affected_m2_synthetic ~ precipitation_7d_mm_synthetic,
## data = datos_regresion)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4862 -815 -139 562 53991
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 222.3055 28.8884 7.695 0.0000000000000153
## precipitation_7d_mm_synthetic 29.8185 0.3383 88.136 < 0.0000000000000002
##
## (Intercept) ***
## precipitation_7d_mm_synthetic ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1636 on 11031 degrees of freedom
## Multiple R-squared: 0.4132, Adjusted R-squared: 0.4132
## F-statistic: 7768 on 1 and 11031 DF, p-value: < 0.00000000000000022
# Extraer intercepto y pendiente
parametros <- coef(modelo_lineal)
intercepto <- parametros[1]
pendiente <- parametros[2]
cat(
"Intercepto =", round(intercepto, 2), "\n"
)
## Intercepto = 222.31
cat(
"Pendiente =", round(pendiente, 2), "\n"
)
## Pendiente = 29.82
# Mostrar ecuación de regresión
cat(
"\nECUACIÓN DEL MODELO LINEAL:\n",
"Área afectada estimada =",
round(intercepto, 2),
"+",
round(pendiente, 2),
"* Precipitación acumulada en 7 días\n"
)
##
## ECUACIÓN DEL MODELO LINEAL:
## Área afectada estimada = 222.31 + 29.82 * Precipitación acumulada en 7 días
# Coeficiente de determinación
r_cuadrado <- summary(modelo_lineal)$r.squared
cat(
"\nCoeficiente de determinación R² =",
round(r_cuadrado, 4),
"\n"
)
##
## Coeficiente de determinación R² = 0.4132
# =========================================================
7. SUPERPONER EL MODELO SOBRE LA NUBE DE
PUNTOS
# 7. SUPERPONER EL MODELO SOBRE LA NUBE DE PUNTOS
# =========================================================
plot(
x,
y,
main = "Regresión lineal: precipitación y área afectada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.12, 0.34, 0.72, 0.25),
cex = 0.7
)
grid()
abline(
modelo_lineal,
col = "red",
lwd = 3
)
legend(
"topleft",
legend = c(
"Eventos registrados",
"Recta de regresión"
),
col = c(
rgb(0.12, 0.34, 0.72, 0.70),
"red"
),
pch = c(16, NA),
lty = c(NA, 1),
lwd = c(NA, 3),
cex = 0.9,
bty = "n"
)
mtext(
paste0(
"y = ", round(intercepto, 2),
" + ", round(pendiente, 2),
"x R² = ", round(r_cuadrado, 3)
),
side = 3,
line = 0.2,
cex = 0.85
)

# =========================================================
8. COVARIANZA Y TEST DE CORRELACIÓN DE PEARSON
# 8. COVARIANZA Y TEST DE CORRELACIÓN DE PEARSON
# =========================================================
# Covarianza
covarianza_xy <- cov(x, y)
cat(
"\nCovarianza entre precipitación y área afectada =",
round(covarianza_xy, 2),
"\n"
)
##
## Covarianza entre precipitación y área afectada = 63227.27
# Test de Pearson
pearson_lineal <- cor.test(
x,
y,
method = "pearson"
)
pearson_lineal
##
## Pearson's product-moment correlation
##
## data: x and y
## t = 88.136, df = 11031, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6317331 0.6536351
## sample estimates:
## cor
## 0.6428155
# Extraer resultados principales
r_pearson <- pearson_lineal$estimate
p_valor <- pearson_lineal$p.value
cat(
"\nCoeficiente de Pearson r =",
round(r_pearson, 3),
"\n"
)
##
## Coeficiente de Pearson r = 0.643
cat(
"p-value =",
format.pval(p_valor, digits = 4),
"\n"
)
## p-value = < 0.00000000000000022
# =========================================================
8.1. RESTRICCIONES DEL MODELO
# 8.1 RESTRICCIONES DEL MODELO
# =========================================================
# El modelo debe aplicarse solamente dentro del rango observado
# de precipitación de la muestra.
min_precipitacion <- min(x)
max_precipitacion <- max(x)
cat(
"\nRango válido de precipitación observado:\n",
round(min_precipitacion, 2),
"a",
round(max_precipitacion, 2),
"mm.\n"
)
##
## Rango válido de precipitación observado:
## 0.5 a 507.07 mm.
cat(
"No se recomienda estimar valores fuera de este rango.\n"
)
## No se recomienda estimar valores fuera de este rango.
# =========================================================
10. CONCLUSIÓN DEL MODELO
# 10. CONCLUSIÓN DEL MODELO
# =========================================================
cat(
"\n=============================================\n",
"CONCLUSIÓN DEL MODELO DE REGRESIÓN LINEAL\n",
"=============================================\n"
)
##
## =============================================
## CONCLUSIÓN DEL MODELO DE REGRESIÓN LINEAL
## =============================================
cat(
"La covarianza entre precipitación acumulada y área afectada fue de",
round(covarianza_xy, 2),
".\n"
)
## La covarianza entre precipitación acumulada y área afectada fue de 63227.27 .
cat(
"Al ser positiva, indica una asociación directa entre ambas variables.\n"
)
## Al ser positiva, indica una asociación directa entre ambas variables.
cat(
"El coeficiente de Pearson fue r =",
round(r_pearson, 3),
"con un p-value de",
format.pval(p_valor, digits = 4),
".\n"
)
## El coeficiente de Pearson fue r = 0.643 con un p-value de < 0.00000000000000022 .
cat(
"Esto indica una relación lineal positiva estadísticamente significativa.\n"
)
## Esto indica una relación lineal positiva estadísticamente significativa.
cat(
"El modelo explica aproximadamente",
round(r_cuadrado * 100, 2),
"% de la variabilidad observada en el área afectada.\n"
)
## El modelo explica aproximadamente 41.32 % de la variabilidad observada en el área afectada.
cat(
"La pendiente indica que, en promedio, por cada aumento de 1 mm\n",
"de precipitación acumulada en 7 días, el área afectada estimada cambia en",
round(pendiente, 2),
"m².\n"
)
## La pendiente indica que, en promedio, por cada aumento de 1 mm
## de precipitación acumulada en 7 días, el área afectada estimada cambia en 29.82 m².
cat(
"Este modelo permite realizar estimaciones aproximadas dentro del rango\n",
"de datos observados, pero representa una asociación estadística y no una\n",
"demostración de causalidad absoluta.\n"
)
## Este modelo permite realizar estimaciones aproximadas dentro del rango
## de datos observados, pero representa una asociación estadística y no una
## demostración de causalidad absoluta.
# =========================================================
MODELO 2: REGRESIÓN EXPONENCIAL
# MODELO 2: REGRESIÓN EXPONENCIAL
# X = Precipitación acumulada en 7 días
# Y = Área afectada por deslizamientos
# =========================================================
# =========================================================
1. LIBRERÍAS Y DATOS
# 1. LIBRERÍAS Y DATOS
# =========================================================
# Se reutiliza el dataset ya cargado: datos
# No se requieren librerías adicionales.
# =========================================================
2. SELECCIÓN DE VARIABLES
# 2. SELECCIÓN DE VARIABLES
# =========================================================
x_exp <- datos$precipitation_7d_mm_synthetic
y_exp <- datos$area_affected_m2_synthetic
datos_exponencial <- data.frame(
precipitacion_7_dias_mm = x_exp,
area_afectada_m2 = y_exp
)
# Para usar log(Y), el área afectada debe ser mayor que cero
datos_exponencial <- subset(
datos_exponencial,
!is.na(precipitacion_7_dias_mm) &
!is.na(area_afectada_m2) &
precipitacion_7_dias_mm > 0 &
area_afectada_m2 > 0
)
x_exp <- datos_exponencial$precipitacion_7_dias_mm
y_exp <- datos_exponencial$area_afectada_m2
# =========================================================
3. TABLA DE PARES DE VALORES
# 3. TABLA DE PARES DE VALORES
# =========================================================
tabla_pares_exponencial <- data.frame(
Precipitacion_7_dias_mm = x_exp,
Area_afectada_m2 = y_exp,
Log_area_afectada = log(y_exp)
)
head(tabla_pares_exponencial, 10)
## Precipitacion_7_dias_mm Area_afectada_m2 Log_area_afectada
## 1 60.21 1879.8 7.538921
## 2 115.77 2183.0 7.688455
## 3 47.14 784.5 6.665047
## 4 52.52 1815.4 7.504061
## 5 12.51 1399.4 7.243799
## 6 84.97 2568.7 7.851155
## 7 121.28 2725.3 7.910334
## 8 83.39 2167.9 7.681514
## 9 93.87 1983.9 7.592820
## 10 105.27 1835.7 7.515181
summary(tabla_pares_exponencial)
## Precipitacion_7_dias_mm Area_afectada_m2 Log_area_afectada
## Min. : 0.50 Min. : 198.6 Min. : 5.291
## 1st Qu.: 38.73 1st Qu.: 1204.0 1st Qu.: 7.093
## Median : 62.74 Median : 1827.9 Median : 7.511
## Mean : 71.91 Mean : 2366.5 Mean : 7.542
## 3rd Qu.: 94.77 3rd Qu.: 2827.5 3rd Qu.: 7.947
## Max. :507.07 Max. :62703.7 Max. :11.046
write.csv(
tabla_pares_exponencial,
"tabla_pares_regresion_exponencial.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# =========================================================
4. GRÁFICA: NUBE DE PUNTOS
# 4. GRÁFICA: NUBE DE PUNTOS
# =========================================================
plot(
x_exp,
y_exp,
main = "Diagrama de dispersión: precipitación y área afectada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.15, 0.45, 0.80, 0.25),
cex = 0.7
)
grid()

# =========================================================
5. CONJETURA Y ESTRUCTURA MATEMÁTICA
# 5. CONJETURA Y ESTRUCTURA MATEMÁTICA
# =========================================================
# Conjetura:
# Se plantea que el área afectada puede aumentar de manera
# acelerada conforme aumenta la precipitación acumulada.
# Modelo exponencial:
# y_estimado = a * e^(b*x)
#
# Linealización:
# ln(y_estimado) = ln(a) + b*x
#
# Restricción:
# El modelo requiere valores positivos en Y,
# porque se calcula log(Y).
# =========================================================
6. CÁLCULO DE PARÁMETROS
# 6. CÁLCULO DE PARÁMETROS
# =========================================================
modelo_exponencial <- lm(
log(area_afectada_m2) ~ precipitacion_7_dias_mm,
data = datos_exponencial
)
summary(modelo_exponencial)
##
## Call:
## lm(formula = log(area_afectada_m2) ~ precipitacion_7_dias_mm,
## data = datos_exponencial)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.78709 -0.33395 -0.00255 0.33016 2.00325
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.8896463 0.0086002 801.1 <0.0000000000000002 ***
## precipitacion_7_dias_mm 0.0090751 0.0001007 90.1 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4871 on 11031 degrees of freedom
## Multiple R-squared: 0.4239, Adjusted R-squared: 0.4239
## F-statistic: 8118 on 1 and 11031 DF, p-value: < 0.00000000000000022
# Parámetros del modelo linealizado
parametros_exp <- coef(modelo_exponencial)
ln_a <- parametros_exp[1]
b_exp <- parametros_exp[2]
# Recuperar parámetro a del modelo original
a_exp <- exp(ln_a)
cat(
"\nECUACIÓN DEL MODELO EXPONENCIAL:\n",
"Área afectada estimada =",
round(a_exp, 2),
"* e^(",
round(b_exp, 5),
"* Precipitación acumulada en 7 días)\n"
)
##
## ECUACIÓN DEL MODELO EXPONENCIAL:
## Área afectada estimada = 982.05 * e^( 0.00908 * Precipitación acumulada en 7 días)
# R² del modelo linealizado
r_cuadrado_exp <- summary(modelo_exponencial)$r.squared
cat(
"\nCoeficiente de determinación R² =",
round(r_cuadrado_exp, 4),
"\n"
)
##
## Coeficiente de determinación R² = 0.4239
# =========================================================
7. SUPERPONER CURVA EXPONENCIAL
# 7. SUPERPONER CURVA EXPONENCIAL
# =========================================================
plot(
x_exp,
y_exp,
main = "Regresión exponencial: precipitación y área afectada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.15, 0.45, 0.80, 0.25),
cex = 0.7
)
grid()
# Crear valores ordenados de X para dibujar la curva
x_curva <- seq(
min(x_exp),
max(x_exp),
length.out = 500
)
# Calcular valores estimados por el modelo exponencial
y_curva <- a_exp * exp(b_exp * x_curva)
# Dibujar curva
lines(
x_curva,
y_curva,
col = "darkgreen",
lwd = 3
)
legend(
"topleft",
legend = c(
"Eventos registrados",
"Curva exponencial"
),
col = c(
rgb(0.15, 0.45, 0.80, 0.70),
"darkgreen"
),
pch = c(16, NA),
lty = c(NA, 1),
lwd = c(NA, 3),
bty = "n"
)
mtext(
paste0(
"y = ",
round(a_exp, 2),
" · e^(",
round(b_exp, 5),
"x) R² = ",
round(r_cuadrado_exp, 3)
),
side = 3,
line = 0.2,
cex = 0.82
)

# =========================================================
8. COVARIANZA Y PEARSON SOBRE DATOS
LINEALIZADOS
# 8. COVARIANZA Y PEARSON SOBRE DATOS LINEALIZADOS
# =========================================================
# Pearson se aplica entre X y ln(Y), porque el modelo fue linealizado
log_y_exp <- log(y_exp)
covarianza_exp <- cov(x_exp, log_y_exp)
pearson_exponencial <- cor.test(
x_exp,
log_y_exp,
method = "pearson"
)
r_pearson_exp <- pearson_exponencial$estimate
p_valor_exp <- pearson_exponencial$p.value
cat(
"\nCovarianza entre X y ln(Y) =",
round(covarianza_exp, 4),
"\n"
)
##
## Covarianza entre X y ln(Y) = 19.2428
cat(
"Pearson entre X y ln(Y): r =",
round(r_pearson_exp, 3),
"\n"
)
## Pearson entre X y ln(Y): r = 0.651
cat(
"p-value =",
format.pval(p_valor_exp, digits = 4),
"\n"
)
## p-value = < 0.00000000000000022
pearson_exponencial
##
## Pearson's product-moment correlation
##
## data: x_exp and log_y_exp
## t = 90.101, df = 11031, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6402295 0.6617310
## sample estimates:
## cor
## 0.6511109
# =========================================================
8.1. RESTRICCIONES DEL MODELO
# 8.1 RESTRICCIONES DEL MODELO
# =========================================================
min_precipitacion_exp <- min(x_exp)
max_precipitacion_exp <- max(x_exp)
cat(
"\nRango válido de precipitación observado:\n",
round(min_precipitacion_exp, 2),
"a",
round(max_precipitacion_exp, 2),
"mm.\n"
)
##
## Rango válido de precipitación observado:
## 0.5 a 507.07 mm.
cat(
"La variable área afectada debe ser mayor que cero.\n",
"No se recomienda extrapolar fuera del rango observado.\n"
)
## La variable área afectada debe ser mayor que cero.
## No se recomienda extrapolar fuera del rango observado.
# =========================================================
9. ESTIMACIÓN
# 9. ESTIMACIÓN
# =========================================================
valor_estimado_exp <- 150
if (
valor_estimado_exp < min_precipitacion_exp ||
valor_estimado_exp > max_precipitacion_exp
) {
cat(
"\nADVERTENCIA: el valor está fuera del rango observado.\n"
)
} else {
area_estimada_exp <- a_exp * exp(
b_exp * valor_estimado_exp
)
cat(
"\nCon",
valor_estimado_exp,
"mm de precipitación acumulada en 7 días,\n",
"el modelo exponencial estima un área afectada de",
round(area_estimada_exp, 2),
"m².\n"
)
}
##
## Con 150 mm de precipitación acumulada en 7 días,
## el modelo exponencial estima un área afectada de 3831.1 m².
# =========================================================
10. CONCLUSIÓN
# 10. CONCLUSIÓN
# =========================================================
cat(
"\n=============================================\n",
"CONCLUSIÓN DEL MODELO EXPONENCIAL\n",
"=============================================\n"
)
##
## =============================================
## CONCLUSIÓN DEL MODELO EXPONENCIAL
## =============================================
cat(
"El modelo exponencial relaciona la precipitación acumulada\n",
"con el área afectada mediante una función creciente.\n"
)
## El modelo exponencial relaciona la precipitación acumulada
## con el área afectada mediante una función creciente.
cat(
"La correlación de Pearson calculada entre X y ln(Y) fue de r =",
round(r_pearson_exp, 3),
"con p-value",
format.pval(p_valor_exp, digits = 4),
".\n"
)
## La correlación de Pearson calculada entre X y ln(Y) fue de r = 0.651 con p-value < 0.00000000000000022 .
cat(
"El modelo linealizado explica aproximadamente",
round(r_cuadrado_exp * 100, 2),
"% de la variabilidad de ln(área afectada).\n"
)
## El modelo linealizado explica aproximadamente 42.39 % de la variabilidad de ln(área afectada).
cat(
"La estimación debe interpretarse como aproximada y aplicarse\n",
"solamente dentro del rango de precipitación observado.\n"
)
## La estimación debe interpretarse como aproximada y aplicarse
## solamente dentro del rango de precipitación observado.
# =========================================================
MODELO 3: REGRESIÓN POTENCIAL
# MODELO 3: REGRESIÓN POTENCIAL
# X = Precipitación acumulada en 7 días
# Y = Área afectada por deslizamientos
# =========================================================
# =========================================================
1. LIBRERÍAS Y DATOS
# 1. LIBRERÍAS Y DATOS
# =========================================================
# Se reutiliza el dataset ya cargado: datos
# No se requieren librerías adicionales.
# =========================================================
2. SELECCIÓN DE VARIABLES
# 2. SELECCIÓN DE VARIABLES
# =========================================================
x_pot <- datos$precipitation_7d_mm_synthetic
y_pot <- datos$area_affected_m2_synthetic
datos_potencial <- data.frame(
precipitacion_7_dias_mm = x_pot,
area_afectada_m2 = y_pot
)
# Para modelo potencial se requiere X > 0 y Y > 0
datos_potencial <- subset(
datos_potencial,
!is.na(precipitacion_7_dias_mm) &
!is.na(area_afectada_m2) &
precipitacion_7_dias_mm > 0 &
area_afectada_m2 > 0
)
x_pot <- datos_potencial$precipitacion_7_dias_mm
y_pot <- datos_potencial$area_afectada_m2
# =========================================================
3. TABLA DE PARES DE VALORES
# 3. TABLA DE PARES DE VALORES
# =========================================================
tabla_pares_potencial <- data.frame(
Precipitacion_7_dias_mm = x_pot,
Area_afectada_m2 = y_pot,
Log_X = log(x_pot),
Log_Y = log(y_pot)
)
head(tabla_pares_potencial, 10)
## Precipitacion_7_dias_mm Area_afectada_m2 Log_X Log_Y
## 1 60.21 1879.8 4.097838 7.538921
## 2 115.77 2183.0 4.751605 7.688455
## 3 47.14 784.5 3.853122 6.665047
## 4 52.52 1815.4 3.961194 7.504061
## 5 12.51 1399.4 2.526528 7.243799
## 6 84.97 2568.7 4.442298 7.851155
## 7 121.28 2725.3 4.798102 7.910334
## 8 83.39 2167.9 4.423528 7.681514
## 9 93.87 1983.9 4.541911 7.592820
## 10 105.27 1835.7 4.656528 7.515181
summary(tabla_pares_potencial)
## Precipitacion_7_dias_mm Area_afectada_m2 Log_X Log_Y
## Min. : 0.50 Min. : 198.6 Min. :-0.6931 Min. : 5.291
## 1st Qu.: 38.73 1st Qu.: 1204.0 1st Qu.: 3.6566 1st Qu.: 7.093
## Median : 62.74 Median : 1827.9 Median : 4.1390 Median : 7.511
## Mean : 71.91 Mean : 2366.5 Mean : 4.0495 Mean : 7.542
## 3rd Qu.: 94.77 3rd Qu.: 2827.5 3rd Qu.: 4.5515 3rd Qu.: 7.947
## Max. :507.07 Max. :62703.7 Max. : 6.2286 Max. :11.046
write.csv(
tabla_pares_potencial,
"tabla_pares_regresion_potencial.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# =========================================================
4. GRÁFICA: NUBE DE PUNTOS / DIAGRAMA DE
DISPERSIÓN
# 4. GRÁFICA: NUBE DE PUNTOS / DIAGRAMA DE DISPERSIÓN
# =========================================================
plot(
x_pot,
y_pot,
main = "Diagrama de dispersión: precipitación y área afectada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.10, 0.40, 0.80, 0.25),
cex = 0.7
)
grid()

# =========================================================
5. CONJETURA Y ESTRUCTURA MATEMÁTICA
# 5. CONJETURA Y ESTRUCTURA MATEMÁTICA
# =========================================================
# Conjetura:
# Se plantea que el área afectada puede relacionarse con la
# precipitación mediante una función potencial.
# Modelo potencial:
# y_estimado = a * x^b
#
# Linealización:
# ln(y_estimado) = ln(a) + b*ln(x)
#
# Restricciones:
# x > 0
# y > 0
# =========================================================
6. CÁLCULO DE PARÁMETROS
# 6. CÁLCULO DE PARÁMETROS
# =========================================================
modelo_potencial <- lm(
log(area_afectada_m2) ~ log(precipitacion_7_dias_mm),
data = datos_potencial
)
summary(modelo_potencial)
##
## Call:
## lm(formula = log(area_afectada_m2) ~ log(precipitacion_7_dias_mm),
## data = datos_potencial)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.89312 -0.36552 -0.01363 0.33898 2.71750
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.554409 0.027531 201.75 <0.0000000000000002
## log(precipitacion_7_dias_mm) 0.490880 0.006685 73.43 <0.0000000000000002
##
## (Intercept) ***
## log(precipitacion_7_dias_mm) ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.526 on 11031 degrees of freedom
## Multiple R-squared: 0.3283, Adjusted R-squared: 0.3282
## F-statistic: 5392 on 1 and 11031 DF, p-value: < 0.00000000000000022
# Extraer parámetros del modelo linealizado
parametros_pot <- coef(modelo_potencial)
ln_a_pot <- parametros_pot[1]
b_pot <- parametros_pot[2]
# Recuperar parámetro a del modelo original
a_pot <- exp(ln_a_pot)
cat(
"\nECUACIÓN DEL MODELO POTENCIAL:\n",
"Área afectada estimada =",
round(a_pot, 4),
"* (Precipitación acumulada en 7 días)^",
round(b_pot, 4),
"\n"
)
##
## ECUACIÓN DEL MODELO POTENCIAL:
## Área afectada estimada = 258.3743 * (Precipitación acumulada en 7 días)^ 0.4909
# R² del modelo linealizado
r_cuadrado_pot <- summary(modelo_potencial)$r.squared
cat(
"\nCoeficiente de determinación R² =",
round(r_cuadrado_pot, 4),
"\n"
)
##
## Coeficiente de determinación R² = 0.3283
# =========================================================
7. SUPERPONER CURVA POTENCIAL
# 7. SUPERPONER CURVA POTENCIAL
# =========================================================
plot(
x_pot,
y_pot,
main = "Regresión potencial: precipitación y área afectada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.10, 0.40, 0.80, 0.25),
cex = 0.7
)
grid()
x_curva_pot <- seq(
min(x_pot),
max(x_pot),
length.out = 500
)
y_curva_pot <- a_pot * (x_curva_pot ^ b_pot)
lines(
x_curva_pot,
y_curva_pot,
col = "purple",
lwd = 3
)
legend(
"topleft",
legend = c(
"Eventos registrados",
"Curva potencial"
),
col = c(
rgb(0.10, 0.40, 0.80, 0.70),
"purple"
),
pch = c(16, NA),
lty = c(NA, 1),
lwd = c(NA, 3),
bty = "n"
)
mtext(
paste0(
"y = ",
round(a_pot, 2),
"·x^",
round(b_pot, 4),
" R² = ",
round(r_cuadrado_pot, 3)
),
side = 3,
line = 0.2,
cex = 0.82
)

# =========================================================
8. COVARIANZA Y TEST DE PEARSON
# 8. COVARIANZA Y TEST DE PEARSON
# =========================================================
# Pearson se calcula sobre la forma linealizada:
# ln(X) y ln(Y)
log_x_pot <- log(x_pot)
log_y_pot <- log(y_pot)
covarianza_pot <- cov(log_x_pot, log_y_pot)
pearson_potencial <- cor.test(
log_x_pot,
log_y_pot,
method = "pearson"
)
pearson_potencial
##
## Pearson's product-moment correlation
##
## data: log_x_pot and log_y_pot
## t = 73.428, df = 11031, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.5603122 0.5853825
## sample estimates:
## cor
## 0.5729814
r_pearson_pot <- pearson_potencial$estimate
p_valor_pot <- pearson_potencial$p.value
cat(
"\nCovarianza entre ln(X) y ln(Y) =",
round(covarianza_pot, 4),
"\n"
)
##
## Covarianza entre ln(X) y ln(Y) = 0.2755
cat(
"Coeficiente de Pearson r =",
round(r_pearson_pot, 3),
"\n"
)
## Coeficiente de Pearson r = 0.573
cat(
"p-value =",
format.pval(p_valor_pot, digits = 4),
"\n"
)
## p-value = < 0.00000000000000022
# =========================================================
8.1. RESTRICCIONES DEL MODELO
# 8.1 RESTRICCIONES DEL MODELO
# =========================================================
min_x_pot <- min(x_pot)
max_x_pot <- max(x_pot)
cat(
"\nRango válido de precipitación observado:\n",
round(min_x_pot, 2),
"a",
round(max_x_pot, 2),
"mm.\n"
)
##
## Rango válido de precipitación observado:
## 0.5 a 507.07 mm.
cat(
"El modelo potencial requiere valores positivos en X y Y.\n",
"No se recomienda extrapolar fuera del rango observado.\n"
)
## El modelo potencial requiere valores positivos en X y Y.
## No se recomienda extrapolar fuera del rango observado.
# =========================================================
9. ESTIMACIÓN
# 9. ESTIMACIÓN
# =========================================================
valor_estimado_pot <- 150
if (
valor_estimado_pot < min_x_pot ||
valor_estimado_pot > max_x_pot
) {
cat(
"\nADVERTENCIA: el valor está fuera del rango observado.\n"
)
} else {
area_estimada_pot <- a_pot * (valor_estimado_pot ^ b_pot)
cat(
"\nCon",
valor_estimado_pot,
"mm de precipitación acumulada en 7 días,\n",
"el modelo potencial estima un área afectada de",
round(area_estimada_pot, 2),
"m².\n"
)
}
##
## Con 150 mm de precipitación acumulada en 7 días,
## el modelo potencial estima un área afectada de 3023.07 m².
# =========================================================
10. CONCLUSIÓN
# 10. CONCLUSIÓN
# =========================================================
cat(
"\n=============================================\n",
"CONCLUSIÓN DEL MODELO POTENCIAL\n",
"=============================================\n"
)
##
## =============================================
## CONCLUSIÓN DEL MODELO POTENCIAL
## =============================================
cat(
"El modelo potencial relaciona la precipitación acumulada\n",
"con el área afectada mediante una función del tipo y = a*x^b.\n"
)
## El modelo potencial relaciona la precipitación acumulada
## con el área afectada mediante una función del tipo y = a*x^b.
cat(
"La correlación de Pearson calculada entre ln(X) y ln(Y) fue de r =",
round(r_pearson_pot, 3),
"con p-value",
format.pval(p_valor_pot, digits = 4),
".\n"
)
## La correlación de Pearson calculada entre ln(X) y ln(Y) fue de r = 0.573 con p-value < 0.00000000000000022 .
cat(
"El modelo linealizado explica aproximadamente",
round(r_cuadrado_pot * 100, 2),
"% de la variabilidad observada en ln(Y).\n"
)
## El modelo linealizado explica aproximadamente 32.83 % de la variabilidad observada en ln(Y).
cat(
"Este modelo puede ser útil para describir relaciones no lineales\n",
"cuando el crecimiento de Y depende proporcionalmente de una potencia de X.\n"
)
## Este modelo puede ser útil para describir relaciones no lineales
## cuando el crecimiento de Y depende proporcionalmente de una potencia de X.
cat(
"La estimación debe interpretarse con cautela y dentro del rango observado.\n"
)
## La estimación debe interpretarse con cautela y dentro del rango observado.
# =========================================================
MODELO 4: REGRESIÓN LOGARÍTMICA
# MODELO 4: REGRESIÓN LOGARÍTMICA
# X = Precipitación acumulada en 7 días
# Y = Área afectada por deslizamientos
# =========================================================
# =========================================================
1. LIBRERÍAS Y DATOS
# 1. LIBRERÍAS Y DATOS
# =========================================================
# Se reutiliza el dataset ya cargado: datos
# No se requieren librerías adicionales.
# =========================================================
2. SELECCIÓN DE VARIABLES
# 2. SELECCIÓN DE VARIABLES
# =========================================================
x_log <- datos$precipitation_7d_mm_synthetic
y_log <- datos$area_affected_m2_synthetic
datos_logaritmico <- data.frame(
precipitacion_7_dias_mm = x_log,
area_afectada_m2 = y_log
)
# Restricción del modelo logarítmico:
# X debe ser mayor que cero, porque se aplica ln(X).
datos_logaritmico <- subset(
datos_logaritmico,
!is.na(precipitacion_7_dias_mm) &
!is.na(area_afectada_m2) &
precipitacion_7_dias_mm > 0
)
# Actualizar variables depuradas
x_log <- datos_logaritmico$precipitacion_7_dias_mm
y_log <- datos_logaritmico$area_afectada_m2
# Variable transformada
ln_x_log <- log(x_log)
# =========================================================
3. TABLA DE PARES DE VALORES
# 3. TABLA DE PARES DE VALORES
# =========================================================
tabla_pares_logaritmico <- data.frame(
Precipitacion_7_dias_mm = x_log,
Ln_precipitacion = ln_x_log,
Area_afectada_m2 = y_log
)
head(tabla_pares_logaritmico, 10)
## Precipitacion_7_dias_mm Ln_precipitacion Area_afectada_m2
## 1 60.21 4.097838 1879.8
## 2 115.77 4.751605 2183.0
## 3 47.14 3.853122 784.5
## 4 52.52 3.961194 1815.4
## 5 12.51 2.526528 1399.4
## 6 84.97 4.442298 2568.7
## 7 121.28 4.798102 2725.3
## 8 83.39 4.423528 2167.9
## 9 93.87 4.541911 1983.9
## 10 105.27 4.656528 1835.7
summary(tabla_pares_logaritmico)
## Precipitacion_7_dias_mm Ln_precipitacion Area_afectada_m2
## Min. : 0.50 Min. :-0.6931 Min. : 198.6
## 1st Qu.: 38.73 1st Qu.: 3.6566 1st Qu.: 1204.0
## Median : 62.74 Median : 4.1390 Median : 1827.9
## Mean : 71.91 Mean : 4.0495 Mean : 2366.5
## 3rd Qu.: 94.77 3rd Qu.: 4.5515 3rd Qu.: 2827.5
## Max. :507.07 Max. : 6.2286 Max. :62703.7
write.csv(
tabla_pares_logaritmico,
"tabla_pares_regresion_logaritmica.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# =========================================================
4. GRÁFICA: NUBE DE PUNTOS
# 4. GRÁFICA: NUBE DE PUNTOS
# =========================================================
plot(
x_log,
y_log,
main = "Diagrama de dispersión: precipitación y área afectada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.12, 0.34, 0.72, 0.25),
cex = 0.7
)
grid()

# =========================================================
5. CONJETURA Y ESTRUCTURA MATEMÁTICA
# 5. CONJETURA Y ESTRUCTURA MATEMÁTICA
# =========================================================
# Conjetura:
# Se propone un modelo logarítmico si el área afectada aumenta
# rápidamente al inicio y luego el crecimiento se vuelve más gradual.
# Estructura matemática:
# y_estimado = a + b * ln(x)
#
# Donde:
# y_estimado = área afectada estimada en m²
# x = precipitación acumulada en 7 días
# a = intercepto
# b = cambio esperado en Y por cambio logarítmico de X
#
# Restricción:
# x debe ser mayor que cero.
# =========================================================
6. CÁLCULO DE PARÁMETROS
# 6. CÁLCULO DE PARÁMETROS
# =========================================================
modelo_logaritmico <- lm(
area_afectada_m2 ~ log(precipitacion_7_dias_mm),
data = datos_logaritmico
)
summary(modelo_logaritmico)
##
## Call:
## lm(formula = area_afectada_m2 ~ log(precipitacion_7_dias_mm),
## data = datos_logaritmico)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2981 -1005 -342 506 58188
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3065.33 98.65 -31.07 <0.0000000000000002
## log(precipitacion_7_dias_mm) 1341.36 23.96 55.99 <0.0000000000000002
##
## (Intercept) ***
## log(precipitacion_7_dias_mm) ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1885 on 11031 degrees of freedom
## Multiple R-squared: 0.2213, Adjusted R-squared: 0.2212
## F-statistic: 3135 on 1 and 11031 DF, p-value: < 0.00000000000000022
# Extraer parámetros
parametros_log <- coef(modelo_logaritmico)
intercepto_log <- parametros_log[1]
pendiente_log <- parametros_log[2]
# Coeficiente de determinación
r_cuadrado_log <- summary(modelo_logaritmico)$r.squared
cat(
"\nECUACIÓN DEL MODELO LOGARÍTMICO:\n",
"Área afectada estimada =",
round(intercepto_log, 2),
"+",
round(pendiente_log, 2),
"* ln(Precipitación acumulada en 7 días)\n"
)
##
## ECUACIÓN DEL MODELO LOGARÍTMICO:
## Área afectada estimada = -3065.33 + 1341.36 * ln(Precipitación acumulada en 7 días)
cat(
"\nCoeficiente de determinación R² =",
round(r_cuadrado_log, 4),
"\n"
)
##
## Coeficiente de determinación R² = 0.2213
# =========================================================
7. SUPERPONER CURVA LOGARÍTMICA
# 7. SUPERPONER CURVA LOGARÍTMICA
# =========================================================
plot(
x_log,
y_log,
main = "Regresión logarítmica: precipitación y área afectada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.12, 0.34, 0.72, 0.25),
cex = 0.7
)
grid()
# Valores ordenados de X para la curva
x_curva_log <- seq(
min(x_log),
max(x_log),
length.out = 500
)
# Valores estimados
y_curva_log <- intercepto_log + pendiente_log * log(x_curva_log)
# Dibujar curva
lines(
x_curva_log,
y_curva_log,
col = "orange",
lwd = 3
)
legend(
"topleft",
legend = c(
"Eventos registrados",
"Curva logarítmica"
),
col = c(
rgb(0.12, 0.34, 0.72, 0.70),
"orange"
),
pch = c(16, NA),
lty = c(NA, 1),
lwd = c(NA, 3),
bty = "n"
)
mtext(
paste0(
"y = ",
round(intercepto_log, 2),
" + ",
round(pendiente_log, 2),
" ln(x) R² = ",
round(r_cuadrado_log, 3)
),
side = 3,
line = 0.2,
cex = 0.82
)

# =========================================================
8. COVARIANZA Y TEST DE PEARSON
# 8. COVARIANZA Y TEST DE PEARSON
# =========================================================
# Para este modelo, la relación lineal se evalúa entre ln(X) y Y.
covarianza_log <- cov(ln_x_log, y_log)
pearson_logaritmico <- cor.test(
ln_x_log,
y_log,
method = "pearson"
)
pearson_logaritmico
##
## Pearson's product-moment correlation
##
## data: ln_x_log and y_log
## t = 55.993, df = 11031, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.4557840 0.4848466
## sample estimates:
## cor
## 0.4704429
r_pearson_log <- pearson_logaritmico$estimate
p_valor_log <- pearson_logaritmico$p.value
cat(
"\nCovarianza entre ln(X) y Y =",
round(covarianza_log, 2),
"\n"
)
##
## Covarianza entre ln(X) y Y = 752.81
cat(
"Coeficiente de Pearson r =",
round(r_pearson_log, 3),
"\n"
)
## Coeficiente de Pearson r = 0.47
cat(
"p-value =",
format.pval(p_valor_log, digits = 4),
"\n"
)
## p-value = < 0.00000000000000022
# =========================================================
8.1. RESTRICCIONES DEL MODELO
# 8.1 RESTRICCIONES DEL MODELO
# =========================================================
min_precipitacion_log <- min(x_log)
max_precipitacion_log <- max(x_log)
cat(
"\nRango válido de precipitación observado:\n",
round(min_precipitacion_log, 2),
"a",
round(max_precipitacion_log, 2),
"mm.\n"
)
##
## Rango válido de precipitación observado:
## 0.5 a 507.07 mm.
cat(
"El modelo requiere valores positivos de precipitación.\n",
"No se recomienda estimar fuera del rango observado.\n"
)
## El modelo requiere valores positivos de precipitación.
## No se recomienda estimar fuera del rango observado.
# =========================================================
9. ESTIMACIÓN
# 9. ESTIMACIÓN
# =========================================================
valor_estimado_log <- 150
if (
valor_estimado_log < min_precipitacion_log ||
valor_estimado_log > max_precipitacion_log
) {
cat(
"\nADVERTENCIA: el valor está fuera del rango observado.\n"
)
} else {
area_estimada_log <- intercepto_log +
pendiente_log * log(valor_estimado_log)
cat(
"\nCon",
valor_estimado_log,
"mm de precipitación acumulada en 7 días,\n",
"el modelo logarítmico estima un área afectada de",
round(area_estimada_log, 2),
"m².\n"
)
}
##
## Con 150 mm de precipitación acumulada en 7 días,
## el modelo logarítmico estima un área afectada de 3655.75 m².
# =========================================================
10. CONCLUSIÓN
# 10. CONCLUSIÓN
# =========================================================
cat(
"\n=============================================\n",
"CONCLUSIÓN DEL MODELO LOGARÍTMICO\n",
"=============================================\n"
)
##
## =============================================
## CONCLUSIÓN DEL MODELO LOGARÍTMICO
## =============================================
cat(
"El modelo logarítmico describe la relación entre la precipitación\n",
"acumulada y el área afectada mediante una función y = a + b ln(x).\n"
)
## El modelo logarítmico describe la relación entre la precipitación
## acumulada y el área afectada mediante una función y = a + b ln(x).
cat(
"La correlación de Pearson entre ln(X) y Y fue r =",
round(r_pearson_log, 3),
"con un p-value de",
format.pval(p_valor_log, digits = 4),
".\n"
)
## La correlación de Pearson entre ln(X) y Y fue r = 0.47 con un p-value de < 0.00000000000000022 .
cat(
"El modelo explica aproximadamente",
round(r_cuadrado_log * 100, 2),
"% de la variabilidad observada en el área afectada.\n"
)
## El modelo explica aproximadamente 22.13 % de la variabilidad observada en el área afectada.
cat(
"La estimación debe interpretarse como aproximada y aplicarse\n",
"únicamente dentro del rango de precipitación registrado.\n"
)
## La estimación debe interpretarse como aproximada y aplicarse
## únicamente dentro del rango de precipitación registrado.
# =========================================================
MODELO 5: REGRESIÓN POLINÓMICA CUADRÁTICA
# MODELO 5: REGRESIÓN POLINÓMICA CUADRÁTICA
# X = Precipitación acumulada en 7 días
# Y = Área afectada por deslizamientos
# =========================================================
# =========================================================
1. LIBRERÍAS Y DATOS
# 1. LIBRERÍAS Y DATOS
# =========================================================
# Se reutiliza el dataset ya cargado: datos
# No se requieren librerías adicionales.
# =========================================================
2. SELECCIÓN DE VARIABLES
# 2. SELECCIÓN DE VARIABLES
# =========================================================
x_pol <- datos$precipitation_7d_mm_synthetic
y_pol <- datos$area_affected_m2_synthetic
datos_polinomico <- data.frame(
precipitacion_7_dias_mm = x_pol,
area_afectada_m2 = y_pol
)
# Eliminar valores faltantes por seguridad
datos_polinomico <- na.omit(datos_polinomico)
# Actualizar X y Y
x_pol <- datos_polinomico$precipitacion_7_dias_mm
y_pol <- datos_polinomico$area_afectada_m2
# Crear término cuadrático
x2_pol <- x_pol^2
# =========================================================
3. TABLA DE PARES DE VALORES
# 3. TABLA DE PARES DE VALORES
# =========================================================
tabla_pares_polinomico <- data.frame(
Precipitacion_7_dias_mm = x_pol,
Precipitacion_cuadrado = x2_pol,
Area_afectada_m2 = y_pol
)
head(tabla_pares_polinomico, 10)
## Precipitacion_7_dias_mm Precipitacion_cuadrado Area_afectada_m2
## 1 60.21 3625.2441 1879.8
## 2 115.77 13402.6929 2183.0
## 3 47.14 2222.1796 784.5
## 4 52.52 2758.3504 1815.4
## 5 12.51 156.5001 1399.4
## 6 84.97 7219.9009 2568.7
## 7 121.28 14708.8384 2725.3
## 8 83.39 6953.8921 2167.9
## 9 93.87 8811.5769 1983.9
## 10 105.27 11081.7729 1835.7
summary(tabla_pares_polinomico)
## Precipitacion_7_dias_mm Precipitacion_cuadrado Area_afectada_m2
## Min. : 0.50 Min. : 0.25 Min. : 198.6
## 1st Qu.: 38.73 1st Qu.: 1500.01 1st Qu.: 1204.0
## Median : 62.74 Median : 3936.31 Median : 1827.9
## Mean : 71.91 Mean : 7290.89 Mean : 2366.5
## 3rd Qu.: 94.77 3rd Qu.: 8981.35 3rd Qu.: 2827.5
## Max. :507.07 Max. :257119.98 Max. :62703.7
write.csv(
tabla_pares_polinomico,
"tabla_pares_regresion_polinomica.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# =========================================================
4. GRÁFICA: NUBE DE PUNTOS
# 4. GRÁFICA: NUBE DE PUNTOS
# =========================================================
plot(
x_pol,
y_pol,
main = "Diagrama de dispersión: precipitación y área afectada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.12, 0.34, 0.72, 0.25),
cex = 0.7
)
grid()

# =========================================================
5. CONJETURA Y ESTRUCTURA MATEMÁTICA
# 5. CONJETURA Y ESTRUCTURA MATEMÁTICA
# =========================================================
# Conjetura:
# Se propone un modelo polinómico cuadrático debido a que
# la relación entre precipitación y área afectada puede presentar
# curvatura y no seguir una recta perfecta.
# Estructura matemática:
# y_estimado = a + b*x + c*x^2
#
# Donde:
# y_estimado = área afectada estimada en m²
# x = precipitación acumulada en 7 días
# a = intercepto
# b = coeficiente lineal
# c = coeficiente cuadrático
# =========================================================
6. CÁLCULO DE PARÁMETROS DEL MODELO
# 6. CÁLCULO DE PARÁMETROS DEL MODELO
# =========================================================
modelo_polinomico <- lm(
area_afectada_m2 ~ precipitacion_7_dias_mm +
I(precipitacion_7_dias_mm^2),
data = datos_polinomico
)
summary(modelo_polinomico)
##
## Call:
## lm(formula = area_afectada_m2 ~ precipitacion_7_dias_mm + I(precipitacion_7_dias_mm^2),
## data = datos_polinomico)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8169 -724 -229 490 48678
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 1557.156325 37.935665 41.047
## precipitacion_7_dias_mm -6.734240 0.811281 -8.301
## I(precipitacion_7_dias_mm^2) 0.177422 0.003645 48.675
## Pr(>|t|)
## (Intercept) <0.0000000000000002 ***
## precipitacion_7_dias_mm <0.0000000000000002 ***
## I(precipitacion_7_dias_mm^2) <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1485 on 11030 degrees of freedom
## Multiple R-squared: 0.517, Adjusted R-squared: 0.5169
## F-statistic: 5902 on 2 and 11030 DF, p-value: < 0.00000000000000022
# Extraer parámetros
parametros_pol <- coef(modelo_polinomico)
intercepto_pol <- parametros_pol[1]
coef_lineal_pol <- parametros_pol[2]
coef_cuadratico_pol <- parametros_pol[3]
# Coeficiente de determinación
r_cuadrado_pol <- summary(modelo_polinomico)$r.squared
cat(
"\nECUACIÓN DEL MODELO POLINÓMICO:\n",
"Área afectada estimada =",
round(intercepto_pol, 2),
"+",
round(coef_lineal_pol, 2),
"* x +",
round(coef_cuadratico_pol, 5),
"* x²\n"
)
##
## ECUACIÓN DEL MODELO POLINÓMICO:
## Área afectada estimada = 1557.16 + -6.73 * x + 0.17742 * x²
cat(
"\nCoeficiente de determinación R² =",
round(r_cuadrado_pol, 4),
"\n"
)
##
## Coeficiente de determinación R² = 0.517
# =========================================================
7. SUPERPONER CURVA POLINÓMICA
# 7. SUPERPONER CURVA POLINÓMICA
# =========================================================
plot(
x_pol,
y_pol,
main = "Regresión polinómica: precipitación y área afectada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.12, 0.34, 0.72, 0.25),
cex = 0.7
)
grid()
# Crear valores ordenados para dibujar la curva
x_curva_pol <- seq(
min(x_pol),
max(x_pol),
length.out = 500
)
# Calcular estimaciones según la ecuación polinómica
y_curva_pol <- intercepto_pol +
coef_lineal_pol * x_curva_pol +
coef_cuadratico_pol * x_curva_pol^2
# Dibujar curva polinómica
lines(
x_curva_pol,
y_curva_pol,
col = "darkorange3",
lwd = 3
)
legend(
"topleft",
legend = c(
"Eventos registrados",
"Curva polinómica"
),
col = c(
rgb(0.12, 0.34, 0.72, 0.70),
"darkorange3"
),
pch = c(16, NA),
lty = c(NA, 1),
lwd = c(NA, 3),
bty = "n"
)
mtext(
paste0(
"y = ",
round(intercepto_pol, 2),
" + ",
round(coef_lineal_pol, 2),
"x + ",
round(coef_cuadratico_pol, 5),
"x² R² = ",
round(r_cuadrado_pol, 3)
),
side = 3,
line = 0.2,
cex = 0.78
)

# =========================================================
8. COVARIANZA Y TEST DE PEARSON
# 8. COVARIANZA Y TEST DE PEARSON
# =========================================================
# Pearson se calcula entre X y Y originales.
# Sirve para medir la parte lineal de la relación.
covarianza_pol <- cov(x_pol, y_pol)
pearson_polinomico <- cor.test(
x_pol,
y_pol,
method = "pearson"
)
pearson_polinomico
##
## Pearson's product-moment correlation
##
## data: x_pol and y_pol
## t = 88.136, df = 11031, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6317331 0.6536351
## sample estimates:
## cor
## 0.6428155
r_pearson_pol <- pearson_polinomico$estimate
p_valor_pol <- pearson_polinomico$p.value
cat(
"\nCovarianza entre X y Y =",
round(covarianza_pol, 2),
"\n"
)
##
## Covarianza entre X y Y = 63227.27
cat(
"Coeficiente de Pearson r =",
round(r_pearson_pol, 3),
"\n"
)
## Coeficiente de Pearson r = 0.643
cat(
"p-value =",
format.pval(p_valor_pol, digits = 4),
"\n"
)
## p-value = < 0.00000000000000022
# =========================================================
8.1. RESTRICCIONES DEL MODELO
# 8.1 RESTRICCIONES DEL MODELO
# =========================================================
min_precipitacion_pol <- min(x_pol)
max_precipitacion_pol <- max(x_pol)
cat(
"\nRango válido de precipitación observado:\n",
round(min_precipitacion_pol, 2),
"a",
round(max_precipitacion_pol, 2),
"mm.\n"
)
##
## Rango válido de precipitación observado:
## 0.5 a 507.07 mm.
cat(
"No se recomienda extrapolar fuera del rango observado,\n",
"porque las curvas polinómicas pueden crecer o disminuir\n",
"rápidamente en valores extremos.\n"
)
## No se recomienda extrapolar fuera del rango observado,
## porque las curvas polinómicas pueden crecer o disminuir
## rápidamente en valores extremos.
# =========================================================
9. ESTIMACIÓN
# 9. ESTIMACIÓN
# =========================================================
valor_estimado_pol <- 150
if (
valor_estimado_pol < min_precipitacion_pol ||
valor_estimado_pol > max_precipitacion_pol
) {
cat(
"\nADVERTENCIA: el valor está fuera del rango observado.\n"
)
} else {
area_estimada_pol <- intercepto_pol +
coef_lineal_pol * valor_estimado_pol +
coef_cuadratico_pol * valor_estimado_pol^2
cat(
"\nCon",
valor_estimado_pol,
"mm de precipitación acumulada en 7 días,\n",
"el modelo polinómico estima un área afectada de",
round(area_estimada_pol, 2),
"m².\n"
)
}
##
## Con 150 mm de precipitación acumulada en 7 días,
## el modelo polinómico estima un área afectada de 4539.02 m².
# =========================================================
10. CONCLUSIÓN
# 10. CONCLUSIÓN
# =========================================================
cat(
"\n=============================================\n",
"CONCLUSIÓN DEL MODELO POLINÓMICO\n",
"=============================================\n"
)
##
## =============================================
## CONCLUSIÓN DEL MODELO POLINÓMICO
## =============================================
cat(
"El modelo polinómico cuadrático incorpora un término x²,\n",
"por lo que permite representar una relación curvilínea entre\n",
"la precipitación acumulada y el área afectada.\n"
)
## El modelo polinómico cuadrático incorpora un término x²,
## por lo que permite representar una relación curvilínea entre
## la precipitación acumulada y el área afectada.
cat(
"El coeficiente de determinación fue R² =",
round(r_cuadrado_pol, 4),
", lo que indica que el modelo explica aproximadamente",
round(r_cuadrado_pol * 100, 2),
"% de la variabilidad observada en el área afectada.\n"
)
## El coeficiente de determinación fue R² = 0.517 , lo que indica que el modelo explica aproximadamente 51.7 % de la variabilidad observada en el área afectada.
cat(
"El coeficiente de Pearson entre las variables originales fue r =",
round(r_pearson_pol, 3),
"con p-value",
format.pval(p_valor_pol, digits = 4),
".\n"
)
## El coeficiente de Pearson entre las variables originales fue r = 0.643 con p-value < 0.00000000000000022 .
cat(
"El modelo permite realizar estimaciones dentro del rango observado,\n",
"pero no debe extrapolarse hacia valores extremos de precipitación.\n"
)
## El modelo permite realizar estimaciones dentro del rango observado,
## pero no debe extrapolarse hacia valores extremos de precipitación.
# =========================================================
MODELO 6: REGRESIÓN MULTIVARIABLE
# MODELO 6: REGRESIÓN MULTIVARIABLE
# Y = Área afectada por deslizamientos
# X1 = Precipitación acumulada en 7 días
# X2 = Pendiente del terreno
# X3 = Elevación
# X4 = Índice de humedad del suelo
# =========================================================
# =========================================================
1. LIBRERÍAS Y DATOS
# 1. LIBRERÍAS Y DATOS
# =========================================================
# Se reutiliza el dataset ya cargado: datos
# Se utilizarán funciones base de R.
# =========================================================
2. SELECCIÓN DE VARIABLES
# 2. SELECCIÓN DE VARIABLES
# =========================================================
# Variable dependiente o respuesta
# Y = área afectada por el deslizamiento
# Variables independientes o explicativas
# X1 = precipitación acumulada en 7 días
# X2 = pendiente del terreno
# X3 = elevación
# X4 = índice de humedad del suelo
datos_multivariable <- datos[, c(
"area_affected_m2_synthetic",
"precipitation_7d_mm_synthetic",
"terrain_slope_deg_synthetic",
"elevation_m_synthetic",
"soil_moisture_index_synthetic"
)]
# Eliminar posibles filas incompletas
datos_multivariable <- na.omit(datos_multivariable)
# Renombrar columnas para trabajar más cómodamente
names(datos_multivariable) <- c(
"area_afectada",
"precipitacion_7_dias",
"pendiente_terreno",
"elevacion",
"humedad_suelo"
)
# Revisar estructura
str(datos_multivariable)
## 'data.frame': 11033 obs. of 5 variables:
## $ area_afectada : num 1880 2183 784 1815 1399 ...
## $ precipitacion_7_dias: num 60.2 115.8 47.1 52.5 12.5 ...
## $ pendiente_terreno : num 28.1 33 19.8 22.9 15.7 ...
## $ elevacion : num 2432 1358 1564 1501 1070 ...
## $ humedad_suelo : num 0.699 0.932 0.816 0.823 0.592 ...
summary(datos_multivariable)
## area_afectada precipitacion_7_dias pendiente_terreno elevacion
## Min. : 198.6 Min. : 0.50 Min. : 1.50 Min. : 292.6
## 1st Qu.: 1204.0 1st Qu.: 38.73 1st Qu.:16.05 1st Qu.:1592.1
## Median : 1827.9 Median : 62.74 Median :21.35 Median :2191.0
## Mean : 2366.5 Mean : 71.91 Mean :21.37 Mean :2430.6
## 3rd Qu.: 2827.5 3rd Qu.: 94.77 3rd Qu.:26.76 3rd Qu.:3013.2
## Max. :62703.7 Max. :507.07 Max. :54.99 Max. :6500.0
## humedad_suelo
## Min. :0.0978
## 1st Qu.:0.5711
## Median :0.7727
## Mean :0.7308
## 3rd Qu.:0.9237
## Max. :1.0000
# =========================================================
3. TABLA DE PARES Y VARIABLES SELECCIONADAS
# 3. TABLA DE PARES Y VARIABLES SELECCIONADAS
# =========================================================
# Mostrar los primeros registros utilizados en el modelo
head(datos_multivariable, 10)
## area_afectada precipitacion_7_dias pendiente_terreno elevacion humedad_suelo
## 1 1879.8 60.21 28.14 2431.8 0.6991
## 2 2183.0 115.77 33.00 1357.9 0.9316
## 3 784.5 47.14 19.77 1564.0 0.8163
## 4 1815.4 52.52 22.85 1500.8 0.8226
## 5 1399.4 12.51 15.65 1069.9 0.5915
## 6 2568.7 84.97 23.76 2024.7 0.9407
## 7 2725.3 121.28 14.44 4202.4 0.9310
## 8 2167.9 83.39 11.02 2063.8 0.9337
## 9 1983.9 93.87 16.17 3947.0 0.8726
## 10 1835.7 105.27 25.24 1459.0 0.9837
# Guardar tabla de variables seleccionadas
write.csv(
datos_multivariable,
"tabla_variables_regresion_multivariable.csv",
row.names = FALSE,
fileEncoding = "UTF-8"
)
# =========================================================
4. GRÁFICAS DE DISPERSIÓN
# 4. GRÁFICAS DE DISPERSIÓN
# =========================================================
# Matriz de dispersión entre todas las variables
pairs(
datos_multivariable,
main = "Matriz de dispersión para regresión multivariable",
pch = 16,
col = rgb(0.12, 0.34, 0.72, 0.25)
)

# Gráfico principal:
# precipitación frente a área afectada
plot(
datos_multivariable$precipitacion_7_dias,
datos_multivariable$area_afectada,
main = "Área afectada y precipitación acumulada",
xlab = "Precipitación acumulada en 7 días (mm)",
ylab = "Área afectada por deslizamiento (m²)",
pch = 16,
col = rgb(0.12, 0.34, 0.72, 0.25),
cex = 0.7
)
grid()

# =========================================================
5. CONJETURA Y ESTRUCTURA MATEMÁTICA
# 5. CONJETURA Y ESTRUCTURA MATEMÁTICA
# =========================================================
# Conjetura:
# El área afectada puede explicarse mejor al considerar
# conjuntamente la precipitación, pendiente, elevación
# y humedad del suelo.
# Estructura matemática:
#
# Área afectada estimada =
# a +
# b1 * precipitación +
# b2 * pendiente +
# b3 * elevación +
# b4 * humedad del suelo
#
# Donde:
# a = intercepto
# b1 = efecto de la precipitación
# b2 = efecto de la pendiente
# b3 = efecto de la elevación
# b4 = efecto de la humedad del suelo
# =========================================================
6. CÁLCULO DE PARÁMETROS DEL MODELO
# 6. CÁLCULO DE PARÁMETROS DEL MODELO
# =========================================================
modelo_multivariable <- lm(
area_afectada ~
precipitacion_7_dias +
pendiente_terreno +
elevacion +
humedad_suelo,
data = datos_multivariable
)
# Resumen completo del modelo
summary(modelo_multivariable)
##
## Call:
## lm(formula = area_afectada ~ precipitacion_7_dias + pendiente_terreno +
## elevacion + humedad_suelo, data = datos_multivariable)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5655 -722 -106 552 51215
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -345.26880 74.19699 -4.653 0.0000033 ***
## precipitacion_7_dias 40.43648 0.50542 80.006 < 0.0000000000000002 ***
## pendiente_terreno 61.33676 1.81367 33.819 < 0.0000000000000002 ***
## elevacion 0.23566 0.01231 19.139 < 0.0000000000000002 ***
## humedad_suelo -2845.24105 107.54940 -26.455 < 0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1492 on 11028 degrees of freedom
## Multiple R-squared: 0.5122, Adjusted R-squared: 0.512
## F-statistic: 2894 on 4 and 11028 DF, p-value: < 0.00000000000000022
# Extraer coeficientes
coeficientes_multi <- coef(modelo_multivariable)
intercepto_multi <- coeficientes_multi[1]
b_precipitacion <- coeficientes_multi[2]
b_pendiente <- coeficientes_multi[3]
b_elevacion <- coeficientes_multi[4]
b_humedad <- coeficientes_multi[5]
# Coeficiente de determinación
r_cuadrado_multi <- summary(modelo_multivariable)$r.squared
r_cuadrado_ajustado_multi <- summary(modelo_multivariable)$adj.r.squared
cat(
"\nECUACIÓN DEL MODELO MULTIVARIABLE:\n"
)
##
## ECUACIÓN DEL MODELO MULTIVARIABLE:
cat(
"Área afectada estimada =",
round(intercepto_multi, 2),
"+",
round(b_precipitacion, 2),
"* precipitación +",
round(b_pendiente, 2),
"* pendiente +",
round(b_elevacion, 2),
"* elevación +",
round(b_humedad, 2),
"* humedad del suelo\n"
)
## Área afectada estimada = -345.27 + 40.44 * precipitación + 61.34 * pendiente + 0.24 * elevación + -2845.24 * humedad del suelo
cat(
"\nR² =",
round(r_cuadrado_multi, 4),
"\n"
)
##
## R² = 0.5122
cat(
"R² ajustado =",
round(r_cuadrado_ajustado_multi, 4),
"\n"
)
## R² ajustado = 0.512
# =========================================================
7. SUPERPONER VALORES OBSERVADOS Y ESTIMADOS
# 7. SUPERPONER VALORES OBSERVADOS Y ESTIMADOS
# =========================================================
# Predicciones del modelo
datos_multivariable$area_estimada <- predict(modelo_multivariable)
# Comparación entre área observada y área estimada
plot(
datos_multivariable$area_afectada,
datos_multivariable$area_estimada,
main = "Regresión multivariable: valores observados y estimados",
xlab = "Área afectada observada (m²)",
ylab = "Área afectada estimada por el modelo (m²)",
pch = 16,
col = rgb(0.12, 0.34, 0.72, 0.25),
cex = 0.7
)
grid()
# Línea de ajuste perfecto
abline(
a = 0,
b = 1,
col = "red",
lwd = 3
)
legend(
"topleft",
legend = c(
"Valores estimados",
"Ajuste perfecto"
),
col = c(
rgb(0.12, 0.34, 0.72, 0.70),
"red"
),
pch = c(16, NA),
lty = c(NA, 1),
lwd = c(NA, 3),
bty = "n"
)
mtext(
paste0(
"R² = ",
round(r_cuadrado_multi, 3),
" R² ajustado = ",
round(r_cuadrado_ajustado_multi, 3)
),
side = 3,
line = 0.2,
cex = 0.85
)

# =========================================================
8. PEARSON, COVARIANZA Y MULTICOLINEALIDAD
# 8. PEARSON, COVARIANZA Y MULTICOLINEALIDAD
# =========================================================
# Matriz de correlación de Pearson
matriz_pearson_multi <- cor(
datos_multivariable[, c(
"area_afectada",
"precipitacion_7_dias",
"pendiente_terreno",
"elevacion",
"humedad_suelo"
)],
method = "pearson"
)
round(matriz_pearson_multi, 3)
## area_afectada precipitacion_7_dias pendiente_terreno
## area_afectada 1.000 0.643 0.225
## precipitacion_7_dias 0.643 1.000 -0.002
## pendiente_terreno 0.225 -0.002 1.000
## elevacion 0.134 -0.001 0.026
## humedad_suelo 0.402 0.792 0.004
## elevacion humedad_suelo
## area_afectada 0.134 0.402
## precipitacion_7_dias -0.001 0.792
## pendiente_terreno 0.026 0.004
## elevacion 1.000 -0.006
## humedad_suelo -0.006 1.000
# Pearson entre Y y cada predictor
cor.test(
datos_multivariable$area_afectada,
datos_multivariable$precipitacion_7_dias,
method = "pearson"
)
##
## Pearson's product-moment correlation
##
## data: datos_multivariable$area_afectada and datos_multivariable$precipitacion_7_dias
## t = 88.136, df = 11031, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6317331 0.6536351
## sample estimates:
## cor
## 0.6428155
cor.test(
datos_multivariable$area_afectada,
datos_multivariable$pendiente_terreno,
method = "pearson"
)
##
## Pearson's product-moment correlation
##
## data: datos_multivariable$area_afectada and datos_multivariable$pendiente_terreno
## t = 24.275, df = 11031, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.2074027 0.2428306
## sample estimates:
## cor
## 0.2251911
cor.test(
datos_multivariable$area_afectada,
datos_multivariable$elevacion,
method = "pearson"
)
##
## Pearson's product-moment correlation
##
## data: datos_multivariable$area_afectada and datos_multivariable$elevacion
## t = 14.235, df = 11031, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.1159346 0.1525815
## sample estimates:
## cor
## 0.1343039
cor.test(
datos_multivariable$area_afectada,
datos_multivariable$humedad_suelo,
method = "pearson"
)
##
## Pearson's product-moment correlation
##
## data: datos_multivariable$area_afectada and datos_multivariable$humedad_suelo
## t = 46.157, df = 11031, p-value < 0.00000000000000022
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.3865767 0.4178572
## sample estimates:
## cor
## 0.4023343
# Función para calcular VIF sin instalar librerías
calcular_vif <- function(modelo) {
matriz_modelo <- model.matrix(modelo)[, -1]
vif <- numeric(ncol(matriz_modelo))
for (i in seq_along(vif)) {
modelo_auxiliar <- lm(
matriz_modelo[, i] ~ matriz_modelo[, -i]
)
r2_auxiliar <- summary(modelo_auxiliar)$r.squared
vif[i] <- 1 / (1 - r2_auxiliar)
}
names(vif) <- colnames(matriz_modelo)
return(vif)
}
vif_multivariable <- calcular_vif(modelo_multivariable)
cat("\nVIF de las variables explicativas:\n")
##
## VIF de las variables explicativas:
round(vif_multivariable, 3)
## precipitacion_7_dias pendiente_terreno elevacion
## 2.684 1.001 1.001
## humedad_suelo
## 2.684
# Interpretación general:
# VIF cercano a 1 = poca multicolinealidad.
# VIF menor a 5 = aceptable.
# VIF mayor a 10 = multicolinealidad alta.
# =========================================================
8.1. RESTRICCIONES DEL MODELO
# 8.1 RESTRICCIONES DEL MODELO
# =========================================================
cat(
"\nRESTRICCIONES DEL MODELO:\n"
)
##
## RESTRICCIONES DEL MODELO:
cat(
"- Las estimaciones deben realizarse dentro del rango observado.\n"
)
## - Las estimaciones deben realizarse dentro del rango observado.
cat(
"- Las variables explicativas deben medirse con las mismas unidades.\n"
)
## - Las variables explicativas deben medirse con las mismas unidades.
cat(
"- No se debe interpretar el modelo como una demostración absoluta de causalidad.\n"
)
## - No se debe interpretar el modelo como una demostración absoluta de causalidad.
cat(
"- Debe verificarse que los VIF no sean excesivamente altos.\n"
)
## - Debe verificarse que los VIF no sean excesivamente altos.
# =========================================================
9. ESTIMACIÓN MEDIANTE EL MODELO
# 9. ESTIMACIÓN MEDIANTE EL MODELO
# =========================================================
# Escenario de ejemplo:
# Se utilizan valores razonables para generar una estimación.
nuevo_evento_multi <- data.frame(
precipitacion_7_dias = 150,
pendiente_terreno = median(datos_multivariable$pendiente_terreno),
elevacion = median(datos_multivariable$elevacion),
humedad_suelo = median(datos_multivariable$humedad_suelo)
)
estimacion_multi <- predict(
modelo_multivariable,
newdata = nuevo_evento_multi,
interval = "prediction",
level = 0.95
)
estimacion_multi
## fit lwr upr
## 1 5347.562 2421.574 8273.55
cat(
"\nESCENARIO DE ESTIMACIÓN:\n"
)
##
## ESCENARIO DE ESTIMACIÓN:
cat(
"Precipitación acumulada:",
nuevo_evento_multi$precipitacion_7_dias,
"mm\n"
)
## Precipitación acumulada: 150 mm
cat(
"Pendiente:",
round(nuevo_evento_multi$pendiente_terreno, 2),
"grados\n"
)
## Pendiente: 21.35 grados
cat(
"Elevación:",
round(nuevo_evento_multi$elevacion, 2),
"msnm\n"
)
## Elevación: 2191 msnm
cat(
"Humedad del suelo:",
round(nuevo_evento_multi$humedad_suelo, 2),
"\n"
)
## Humedad del suelo: 0.77
cat(
"Área afectada estimada:",
round(estimacion_multi[1, "fit"], 2),
"m²\n"
)
## Área afectada estimada: 5347.56 m²
cat(
"Intervalo de predicción al 95%:",
round(estimacion_multi[1, "lwr"], 2),
"a",
round(estimacion_multi[1, "upr"], 2),
"m²\n"
)
## Intervalo de predicción al 95%: 2421.57 a 8273.55 m²
# =========================================================
10. CONCLUSIÓN DEL MODELO MULTIVARIABLE
# 10. CONCLUSIÓN DEL MODELO MULTIVARIABLE
# =========================================================
cat(
"\n=============================================\n",
"CONCLUSIÓN DEL MODELO MULTIVARIABLE\n",
"=============================================\n"
)
##
## =============================================
## CONCLUSIÓN DEL MODELO MULTIVARIABLE
## =============================================
cat(
"El modelo multivariable estima el área afectada considerando\n",
"simultáneamente precipitación, pendiente, elevación y humedad del suelo.\n"
)
## El modelo multivariable estima el área afectada considerando
## simultáneamente precipitación, pendiente, elevación y humedad del suelo.
cat(
"El modelo explica aproximadamente",
round(r_cuadrado_multi * 100, 2),
"% de la variabilidad observada en el área afectada.\n"
)
## El modelo explica aproximadamente 51.22 % de la variabilidad observada en el área afectada.
cat(
"El R² ajustado fue de",
round(r_cuadrado_ajustado_multi, 4),
", el cual considera el número de variables incluidas.\n"
)
## El R² ajustado fue de 0.512 , el cual considera el número de variables incluidas.
cat(
"Las variables con p-value menor a 0.05 se consideran\n",
"estadísticamente significativas dentro del modelo.\n"
)
## Las variables con p-value menor a 0.05 se consideran
## estadísticamente significativas dentro del modelo.
cat(
"El análisis VIF permite verificar que las variables independientes\n",
"no presenten multicolinealidad excesiva.\n"
)
## El análisis VIF permite verificar que las variables independientes
## no presenten multicolinealidad excesiva.
cat(
"El modelo permite realizar estimaciones aproximadas dentro del rango\n",
"observado, pero no demuestra causalidad absoluta.\n"
)
## El modelo permite realizar estimaciones aproximadas dentro del rango
## observado, pero no demuestra causalidad absoluta.