#=======================================================================
# LIBRERÍAS
#=======================================================================
library(readxl)
library(tidyverse)
#=======================================================================
# 1. IMPORTAR Y PREPROCESAR
#=======================================================================
datos <- read_excel(file.choose()) %>%
mutate(
PROFUNDIDADE_VERTICAL_M = as.numeric(str_replace(as.character(PROFUNDIDADE_VERTICAL_M), ",", ".")),
PROFUNDIDADE_SONDADOR_M = as.numeric(str_replace(as.character(PROFUNDIDADE_SONDADOR_M), ",", "."))
)
#=======================================================================
# 2. FILTRADO Y LIMPIEZA DE OUTLIERS
#=======================================================================
filtrar_outliers <- function(x) {
Q1 <- quantile(x, 0.25, na.rm = TRUE)
Q3 <- quantile(x, 0.75, na.rm = TRUE)
IQR <- Q3 - Q1
x >= (Q1 - 1.5 * IQR) & x <= (Q3 + 1.5 * IQR)
}
datos_limpios <- datos %>%
filter(PROFUNDIDADE_VERTICAL_M > 4000, PROFUNDIDADE_SONDADOR_M > 100) %>%
filter(filtrar_outliers(PROFUNDIDADE_VERTICAL_M),
filtrar_outliers(PROFUNDIDADE_SONDADOR_M))
#=======================================================================
# 3. VISUALIZACIÓN Y REGRESIÓN
#=======================================================================
plot(datos_limpios$PROFUNDIDADE_SONDADOR_M,
datos_limpios$PROFUNDIDADE_VERTICAL_M,
xlab = "Profundidad Sondador (m)",
ylab = "Profundidad Vertical (m)",
main = "Gráfico N°1: Dispersión sin valores atípicos",
col = "steelblue")
regresionLineal <- lm(PROFUNDIDADE_VERTICAL_M ~ PROFUNDIDADE_SONDADOR_M, data = datos_limpios)
summary(regresionLineal)
##
## Call:
## lm(formula = PROFUNDIDADE_VERTICAL_M ~ PROFUNDIDADE_SONDADOR_M,
## data = datos_limpios)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1333.43 23.45 41.94 64.21 106.46
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 88.40846 103.51339 0.854 0.394
## PROFUNDIDADE_SONDADOR_M 0.96825 0.01982 48.859 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 188.1 on 185 degrees of freedom
## Multiple R-squared: 0.9281, Adjusted R-squared: 0.9277
## F-statistic: 2387 on 1 and 185 DF, p-value: < 2.2e-16
abline(regresionLineal, col = "blue")

#=======================================================================
# 4. CORRELACIÓN Y PREDICCIÓN
#=======================================================================
r <- cor(datos_limpios$PROFUNDIDADE_SONDADOR_M, datos_limpios$PROFUNDIDADE_VERTICAL_M, use = "complete.obs")
r2 <- summary(regresionLineal)$r.squared * 100
print(paste("Coeficiente de correlación (r):", round(r, 4)))
## [1] "Coeficiente de correlación (r): 0.9634"
print(paste("Coeficiente de determinación (R²):", round(r2, 2), "%"))
## [1] "Coeficiente de determinación (R²): 92.81 %"
x1 <- 2000
y_pred <- predict(regresionLineal, newdata = data.frame(PROFUNDIDADE_SONDADOR_M = x1))
print(paste("Si Sondador =", x1, ", la Profundidad Vertical estimada es:", round(y_pred, 2), "m"))
## [1] "Si Sondador = 2000 , la Profundidad Vertical estimada es: 2024.91 m"
cat("Existe una relación fuerte y positiva entre la Profundidad del Sondador y la Profundidad Vertical. El modelo indica que por cada metro que aumenta la profundidad del sondador, la profundidad vertical se incrementa significativamente.")
## Existe una relación fuerte y positiva entre la Profundidad del Sondador y la Profundidad Vertical. El modelo indica que por cada metro que aumenta la profundidad del sondador, la profundidad vertical se incrementa significativamente.