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