# --- IMPORTAR Y PREPROCESAR LOS DATOS ---

# Cargar CSV

datos <- read.csv("C:/Users/y-oss/OneDrive/Escritorio/brasil rstudios/brasil depurada 12.csv", header = TRUE, sep = ";", dec = ",", fill = TRUE)



# Cargar librería para gráfico 3D
library(scatterplot3d)

# Convertir variables a numéricas por si acaso
datos$PROFUNDIDADE_VERTICAL_M <- as.numeric(gsub(",", ".", as.character(datos$PROFUNDIDADE_VERTICAL_M)))
datos$PROFUNDIDADE_SONDADOR_M <- as.numeric(gsub(",", ".", as.character(datos$PROFUNDIDADE_SONDADOR_M)))
datos$COTA_ALTIMETRICA_M <- as.numeric(gsub(",", ".", as.character(datos$COTA_ALTIMETRICA_M)))

# Filtrar datos válidos (sin NA)
datos_filtrados <- subset(datos, 
                          !is.na(PROFUNDIDADE_VERTICAL_M) & !is.na(PROFUNDIDADE_SONDADOR_M) & !is.na(COTA_ALTIMETRICA_M))

# Opcional: eliminar valores extremos con límites lógicos (ajusta según tu conocimiento)
datos_filtrados <- subset(datos_filtrados,
                          PROFUNDIDADE_VERTICAL_M > -4000 & PROFUNDIDADE_VERTICAL_M < 500 &    # Profundidades negativas hasta cierto límite
                            PROFUNDIDADE_SONDADOR_M > -4000 & PROFUNDIDADE_SONDADOR_M < 500 &
                            COTA_ALTIMETRICA_M > -4000 & COTA_ALTIMETRICA_M < 4000)

# Construir el dataframe para regresión
df_reg <- data.frame(
  y = datos_filtrados$PROFUNDIDADE_VERTICAL_M,
  x1 = datos_filtrados$PROFUNDIDADE_SONDADOR_M,
  x2 = datos_filtrados$COTA_ALTIMETRICA_M
)

# Ajustar modelo de regresión múltiple
modelo_multi <- lm(y ~ x1 + x2, data = df_reg)

# Mostrar resumen del modelo
print(summary(modelo_multi))
## 
## Call:
## lm(formula = y ~ x1 + x2, data = df_reg)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3541.5  -126.2    36.3   122.2   690.6 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -110.53915   17.47219  -6.327 3.07e-10 ***
## x1            -0.20729    0.05635  -3.679 0.000241 ***
## x2             1.44777    0.33257   4.353 1.41e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 447.4 on 2046 degrees of freedom
## Multiple R-squared:  0.0127, Adjusted R-squared:  0.01174 
## F-statistic: 13.16 on 2 and 2046 DF,  p-value: 2.092e-06
# Gráfico 3D de dispersión con plano ajustado
scatter3d <- scatterplot3d(df_reg$x1, df_reg$x2, df_reg$y,
                           pch = 16, color = "blue",
                           xlab = "Profundidad Sondador (m)",
                           ylab = "Cota Altimétrica (m)",
                           zlab = "Profundidad Vertical (m)",
                           main = "Regresión Múltiple: Profundidad Vertical vs Sondador y Cota",
                           angle = 150)

# Crear grid para plano de regresión
x1_seq <- seq(min(df_reg$x1), max(df_reg$x1), length.out = 20)
x2_seq <- seq(min(df_reg$x2), max(df_reg$x2), length.out = 20)
grid <- expand.grid(x1_seq, x2_seq)
colnames(grid) <- c("x1", "x2")

# Predecir valores para el grid
grid$y_pred <- predict(modelo_multi, newdata = grid)

# Convertir al sistema de coordenadas del gráfico
coords <- scatter3d$xyz.convert(grid$x1, grid$x2, grid$y_pred)

# Dibujar líneas del plano de regresión
for (i in seq(1, nrow(grid), by = 20)) {
  lines(coords$x[i:(i+19)], coords$y[i:(i+19)], col = "red", lwd = 2)
}
for (j in 1:20) {
  lines(coords$x[seq(j, nrow(grid), by = 20)], coords$y[seq(j, nrow(grid), by = 20)], col = "red", lwd = 2)
}

# Predicción ejemplo
nueva_obs <- data.frame(x1 = -3000, x2 = 100)  # Cambia valores según tu caso
y_predicha <- predict(modelo_multi, newdata = nueva_obs)
cat("Predicción de PROFUNDIDADE_VERTICAL_M para nueva observación:", round(y_predicha, 2), "m\n")
## Predicción de PROFUNDIDADE_VERTICAL_M para nueva observación: 656.1 m
# Conclusion

conclusion <- "La regresión múltiple indica que tanto la Profundidad del Sondador como la Cota Altimétrica influyen significativamente en la Profundidad Vertical. El modelo permite estimar con buena precisión la profundidad vertical a partir de estas dos variables.

"