library(readxl)
library(dplyr)
library(stringr)
library(gt)
library(e1071)
library(lubridate)
library(MASS)
library(knitr)
setwd("C:/Users/majke/Downloads/Proyecto Estadistica/RMARKDOWN")
tryCatch({
Datos_Brutos <- read_excel("tabela_de_pocos_janeiro_2018.xlsx")
}, error = function(e) {
stop("Error al leer el archivo Excel. Verifica la ruta y el nombre.")
})Se definió la Lámina de Agua como variable independiente (x) dado que representa el entorno geográfico y la ubicación en la superficie del mar.
La Profundidad Vertical Promedio actúa como variable dependiente (y), pues refleja la posición del yacimiento en el subsuelo en función de esa ubicación.
Esta relación busca modelar la geometría de la cuenca sedimentaria: geológicamente, a medida que se avanza hacia aguas más profundas, las capas del yacimiento tienden a descender siguiendo una curvatura estructural, lo cual justifica el análisis de su tendencia no lineal.
datos_raw <- Datos_Brutos %>%
dplyr::select(LAMINA_D_AGUA_M, PROFUNDIDADE_VERTICAL_M) %>%
mutate(
x_raw = abs(as.numeric(str_replace(as.character(LAMINA_D_AGUA_M), ",", "."))),
y_raw = abs(as.numeric(str_replace(as.character(PROFUNDIDADE_VERTICAL_M), ",", ".")))
) %>%
filter(!is.na(x_raw) & !is.na(y_raw) & x_raw > 0 & y_raw > 80) %>%
filter(x_raw < 15000)datos_plot <- datos_raw %>% filter(y_raw < 15000)
par(mar = c(5, 5, 4, 2))
color_trans <- rgb(0.2, 0.6, 0.86, 0.4)
plot(datos_plot$x_raw, datos_plot$y_raw,
main = "Gráfica N°1: Dispersión de Profundidad Vertical en función de la Lámina de Agua",
xlab = "Lámina de Agua (m)",
ylab = "Profundidad Vertical (m)",
col = color_trans, pch = 16, cex = 0.6, frame.plot = FALSE)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")Debido a la dispersión observada en la Gráfica N°1, se aplica Binning para reducir el ruido y extraer la tendencia estructural descrita anteriormente.
# Agrupamiento por Rangos
datos_model <- datos_raw %>%
mutate(x_bin = round(x_raw / 50) * 50) %>%
group_by(x_bin) %>%
summarise(
y = mean(y_raw, na.rm = TRUE),
conteo = n()
) %>%
rename(x = x_bin) %>%
filter(conteo >= 3)
# Limpieza de Outliers
lim_y <- quantile(datos_model$y, c(0.05, 0.95))
datos_model <- datos_model %>%
filter(y >= lim_y[1] & y <= lim_y[2])
x <- datos_model$x
y <- datos_model$ypar(mar = c(5, 5, 4, 2))
plot(x, y,
main = "Perfil de Profundidad Vertical Promedio en función de la Lámina de Agua.",
xlab = "Lámina de Agua Agrupada (m)",
ylab = "Profundidad Vertical Promedio (m)",
col = "#3498DB", pch = 16, cex = 1.2, frame.plot = FALSE)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")
axis(1); axis(2)Se ajusta un polinomio de segundo grado (Parábola): y=β2x2+β1x+β0
# Resumen del modelo
resumen <- summary(modelo_poli)
# Coeficiente de determinación
r2 <- resumen$r.squared
# Correlación asociada al ajuste
r <- sqrt(r2)
# Coeficientes del modelo
coeficientes <- coef(modelo_poli)
c <- coeficientes[1]
b <- coeficientes[2]
a <- coeficientes[3]
# Ecuación en texto simple
ecuacion_txt_simple <- paste0(
"y = ",
round(a, 6),
"x² + ",
round(b, 6),
"x + ",
round(c, 6)
)
# Ecuación para mostrar en el informe
ecuacion_txt_latex <- paste0(
"y = ",
round(a, 6),
"x² + ",
round(b, 6),
"x + ",
round(c, 6)
)
# Ejemplo de estimación
x_ejemplo <- mean(x)
y_est <- predict(
modelo_poli,
newdata = data.frame(x = x_ejemplo)
)Se presenta el ajuste del modelo incluyendo la banda de incertidumbre estadística (Intervalo de Confianza del 95%).
par(mar = c(5, 5, 4, 2))
# Base del gráfico
plot(x, y,
main = "Gráfica N°3: Modelo Cuadrático: Profundidad Vertical en función de la Lámina de Agua",
xlab = "Lámina de Agua Agrupada (m)",
ylab = "Profundidad Vertical Promedio (m)",
col = "#3498DB", pch = 16, cex = 1.0, frame.plot = FALSE)
grid(nx = NULL, ny = NULL, col = "#D7DBDD", lty = "dotted")
# Generar Curva
x_seq <- seq(min(x), max(x), length.out = 500)
predicciones <- predict(modelo_poli, newdata = list(x = x_seq), interval = "confidence", level = 0.95)
#Intervalo de Confianza
polygon(c(x_seq, rev(x_seq)),
c(predicciones[,"lwr"], rev(predicciones[,"upr"])),
col = rgb(0.5, 0.5, 0.5, 0.2), border = NA)
# Línea de tendencia
lines(x_seq, predicciones[,"fit"], col = "#E74C3C", lwd = 3)
legend("topleft",
legend = c("Datos (Promedios)", "Modelo Cuadrático", "I.C. 95%"),
col = c("#3498DB", "#E74C3C", "gray"),
pch = c(16, NA, 15),
lwd = c(NA, 3, NA),
pt.cex = c(1, NA, 2),
bty = "n")## Coeficiente de Determinación $R^2$: 0.74 (74%)<br>
## Correlación del ajuste (r): 0.8603
tabla_resumen <- data.frame(
Variable = c("Lámina de Agua", "Prof. Vertical (Promedio)", ""),
Tipo = c("Independiente (X)", "Dependiente (Y)", ""),
R2 = c(paste0(round(r2, 4)), "", ""),
Parametros = c(
paste0("a (x²) = ", sprintf("%.6f", a)),
paste0("b (x) = ", sprintf("%.5f", b)),
paste0("c (Int) = ", sprintf("%.4f", c))
),
Ecuacion = c(ecuacion_txt_simple, "", "")
)
tabla_resumen %>%
gt() %>%
tab_header(
title = md("**RESUMEN MODELO CUADRÁTICO**"),
subtitle = "Tendencia Regional (Agrupada)"
) %>%
tab_source_note(source_note = "Autor: Anahi Macias") %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "#2C3E50"), cell_text(color = "white", weight = "bold")),
locations = cells_title()
) %>%
tab_options(
table.border.top.color = "#2C3E50",
data_row.padding = px(8)
)| RESUMEN MODELO CUADRÁTICO | ||||
| Tendencia Regional (Agrupada) | ||||
| Variable | Tipo | R2 | Parametros | Ecuacion |
|---|---|---|---|---|
| Lámina de Agua | Independiente (X) | 0.74 | a (x²) = 0.000617 | y = 0.000617x² + -0.880568x + 3597.493149 |
| Prof. Vertical (Promedio) | Dependiente (Y) | b (x) = -0.88057 | ||
| c (Int) = 3597.4931 | ||||
| Autor: Anahi Macias | ||||
Entre la lámina de agua y la profundidad vertical promedio existe una
relación de tipo polinómica de segundo grado
(cuadrática) explicada por un coeficiente de determinación
\(R^2\) de “, round(r2,
4),”.
“,”La ecuación matemática del modelo es:
“,
ecuacion_txt_latex,”
“,”Por ejemplo, para una lámina de agua de
“, round(x_ejemplo, 2),” m “,”se estima una profundidad
vertical promedio de “, round(as.numeric(y_est), 2),”
m.” )
cat(texto_conclusion)