#=======================================================================
# 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.