#===============================================================================
# 1. LIBRERÍAS
# Proyecto: Análisis de Regresión Exponencial Simple aplicado a Sedimentos Marinos
#===============================================================================
#------------------------------------------------------------------------------
# Cargar las librerías necesarias.
#
# dplyr: permite filtrar, seleccionar y transformar los datos.
# gt: permite construir tablas con formato profesional.
# knitr: integra correctamente tablas, resultados y texto en RMarkdown.
#------------------------------------------------------------------------------
library(dplyr)
library(gt)
library(knitr)
En esta etapa se carga el conjunto de datos que contiene la información de los sedimentos marinos. Posteriormente, se presenta un resumen general de la base de datos indicando el número de observaciones y el número de variables, con el propósito de verificar que la información fue importada correctamente antes de iniciar el análisis estadístico.
#===============================================================================
# 2. CARGA DE DATOS
#===============================================================================
#------------------------------------------------------------------------------
# Lectura del archivo que contiene la información de los sedimentos marinos.
#------------------------------------------------------------------------------
datos <- read.csv(
"C:/Users/Grace/Downloads/dataset_geologico_limpio_80.3.csv",
header = TRUE,
sep = ",",
dec = ".",
stringsAsFactors = FALSE
)
resumen_bd <- data.frame(
Descripción = c(
"Número de observaciones",
"Número de variables"
),
Valor = c(
nrow(datos),
ncol(datos)
)
)
resumen_bd %>%
gt() %>%
tab_header(
title = md("**Tabla N.°1. Resumen del conjunto de datos**")
) %>%
cols_align(
align = "center"
) %>%
tab_options(
table.width = pct(60),
column_labels.font.weight = "bold"
)
| Tabla N.°1. Resumen del conjunto de datos | |
| Descripción | Valor |
|---|---|
| Número de observaciones | 27784 |
| Número de variables | 58 |
Para el desarrollo del modelo de regresión exponencial se
seleccionaron dos variables cuantitativas del conjunto de datos de
sedimentos marinos. La variable independiente corresponde a la
profundidad del fondo marino en metros (DEPTH_M), mientras
que la variable dependiente corresponde al porcentaje de arcilla
presente en cada muestra (CLAY_PCT). Esta selección se
fundamenta en que la profundidad influye directamente en las condiciones
de energía del ambiente marino; a mayor profundidad, la energía del
medio tiende a disminuir, favoreciendo la deposición de partículas finas
como la arcilla. Por esta razón, existe una relación de causa-efecto
adecuada para el ajuste de un modelo de regresión
exponencial.
#===============================================================================
# 3. SELECCIÓN DE VARIABLES
#===============================================================================
#------------------------------------------------------------------------------
# Definición de las variables del modelo.
#
# X: variable independiente, profundidad del fondo marino.
# Y: variable dependiente, porcentaje de arcilla.
#------------------------------------------------------------------------------
x_original <- as.numeric(datos$DEPTH_M)
y_original <- as.numeric(datos$CLAY_PCT)
tabla_variables <- data.frame(
Rol = c(
"Variable independiente (X)",
"Variable dependiente (Y)"
),
Variable = c(
"DEPTH_M",
"CLAY_PCT"
),
Descripción = c(
"Profundidad del fondo marino (m)",
"Porcentaje de arcilla (%)"
)
)
tabla_variables %>%
gt() %>%
tab_header(
title = md("**Tabla N.°2. Variables seleccionadas para el modelo de regresión exponencial**")
) %>%
cols_align(
align = "center"
) %>%
tab_options(
table.width = pct(80),
column_labels.font.weight = "bold"
)
| Tabla N.°2. Variables seleccionadas para el modelo de regresión exponencial | ||
| Rol | Variable | Descripción |
|---|---|---|
| Variable independiente (X) | DEPTH_M | Profundidad del fondo marino (m) |
| Variable dependiente (Y) | CLAY_PCT | Porcentaje de arcilla (%) |
La tabla de pares de valores se construye a partir de las
variables seleccionadas para el modelo de regresión exponencial. Su
propósito es organizar la información en pares ordenados (X,Y), donde
cada observación representa simultáneamente la profundidad del fondo
marino (DEPTH_M) y el porcentaje de arcilla
(CLAY_PCT). En esta etapa no se realiza ningún tratamiento
estadístico sobre los datos, ya que primero es necesario observar el
comportamiento natural de la nube de puntos mediante el diagrama de
dispersión. Debido al tamaño del conjunto de datos, se presenta el
tamaño muestral total y únicamente las primeras observaciones de la
tabla.
#===============================================================================
# 4. TABLA DE PARES DE VALORES
#===============================================================================
#------------------------------------------------------------------------------
# Construcción de la tabla de pares ordenados (X,Y).
#------------------------------------------------------------------------------
TPV <- data.frame(
x = x_original,
y = y_original
)
n_muestral <- nrow(TPV)
cat("Tamaño muestral:", n_muestral)
## Tamaño muestral: 27784
TPV_tabla_inicial <- TPV %>%
mutate(Nro = row_number()) %>%
select(Nro, x, y)
head(TPV_tabla_inicial, 20) %>%
gt() %>%
cols_label(
Nro = "N°",
x = "DEPTH_M (m)",
y = "CLAY_PCT (%)"
) %>%
tab_header(
title = md("**Tabla N.°3. Primeras filas de la tabla de pares de valores**")
) %>%
fmt_number(
columns = c(x, y),
decimals = 4
) %>%
cols_align(
align = "center"
) %>%
tab_options(
table.width = pct(90),
column_labels.font.weight = "bold"
)
| Tabla N.°3. Primeras filas de la tabla de pares de valores | ||
| N° | DEPTH_M (m) | CLAY_PCT (%) |
|---|---|---|
| 1 | 51.0000 | 19.6639 |
| 2 | 66.0000 | 20.5630 |
| 3 | 69.0000 | 24.1890 |
| 4 | 20.0000 | 20.4440 |
| 5 | 33.0000 | 20.7618 |
| 6 | 185.0000 | 26.4784 |
| 7 | 185.0000 | 23.9701 |
| 8 | 33.0000 | 17.9731 |
| 9 | 55.0000 | 19.4744 |
| 10 | 107.0000 | 20.8027 |
| 11 | 60.0000 | 23.3757 |
| 12 | 51.0000 | 21.5045 |
| 13 | 185.0000 | 23.8498 |
| 14 | 198.0000 | 23.5058 |
| 15 | 170.0000 | 21.6679 |
| 16 | 78.0000 | 24.7907 |
| 17 | 38.0000 | 21.5767 |
| 18 | 49.0000 | 16.8201 |
| 19 | 49.0000 | 22.1560 |
| 20 | 62.0000 | 20.0139 |
El diagrama de dispersión constituye la primera herramienta de análisis del modelo de regresión, ya que permite visualizar el comportamiento conjunto de las variables seleccionadas. A través de la nube de puntos es posible identificar la dirección de la relación, la forma de asociación entre las variables y la posible necesidad de aplicar algún tratamiento previo. Esta representación gráfica sirve como base para formular la conjetura del modelo.
#===============================================================================
# 5. GRÁFICA DE DISPERSIÓN INICIAL
#===============================================================================
#------------------------------------------------------------------------------
# Preparación de los datos para la representación gráfica.
#
# En esta etapa únicamente se retiran registros que no pueden representarse en
# el plano cartesiano o que no permiten aplicar el logaritmo natural de la
# variable dependiente. Esto no constituye un tratamiento estadístico de la nube
# de puntos, sino una condición técnica del modelo exponencial.
#------------------------------------------------------------------------------
TPV_grafica_inicial <- TPV %>%
filter(
!is.na(x),
!is.na(y),
is.finite(x),
is.finite(y),
x >= 0,
y > 0,
y <= 100
)
#------------------------------------------------------------------------------
# Se grafican todos los pares de valores técnicamente válidos. Esto permite que
# la conjetura se formule a partir de la nube completa de datos y no de una
# muestra parcial.
#------------------------------------------------------------------------------
plot(
TPV_grafica_inicial$x,
TPV_grafica_inicial$y,
pch = 16,
cex = 0.48,
col = rgb(0, 0, 1, 0.22),
main = "Gráfica N.°1. Diagrama de dispersión entre DEPTH_M y CLAY_PCT",
xlab = "DEPTH_M (Profundidad del fondo marino, m)",
ylab = "CLAY_PCT (Porcentaje de arcilla, %)"
)
grid()
box()
A partir del diagrama de dispersión se formula una primera
conjetura sobre la relación entre las variables. La nube de puntos
permite observar que el porcentaje de arcilla (CLAY_PCT)
tiende a aumentar conforme se incrementa la profundidad del fondo marino
(DEPTH_M). Además, el incremento no se aprecia como una
relación estrictamente lineal, sino como una tendencia creciente
compatible con un modelo exponencial. Desde el punto de vista
sedimentológico, este comportamiento puede asociarse con la disminución
de la energía del ambiente marino en zonas más profundas, lo cual
favorece la acumulación de partículas finas como la
arcilla.
Al observar la Gráfica N.°1, construida con todos los pares de valores técnicamente válidos, se identifica una nube de puntos con una tendencia creciente clara y compatible con el modelo exponencial propuesto. La distribución no presenta un comportamiento caótico, una dispersión excesiva ni una forma irregular que obligue a segmentar los datos, eliminar observaciones atípicas o agrupar registros antes de ajustar el modelo.
Por esta razón, no se aplica tratamiento estadístico sobre la nube de puntos. En particular, no se realiza eliminación de valores atípicos mediante IQR, no se agrupan observaciones repetidas por promedios y no se segmentan los datos por partes. Aplicar alguno de estos procedimientos sin necesidad podría modificar el comportamiento natural de la información y alterar la relación observada entre las variables.
La única restricción aplicada corresponde a una condición
técnica del modelo exponencial linealizado: CLAY_PCT debe
ser mayor que cero para poder calcular ln(CLAY_PCT). Esta
validación no se considera tratamiento estadístico, sino una condición
matemática necesaria para estimar el modelo. En consecuencia, se
conserva la nube original técnicamente válida y se continúa directamente
con el cálculo de parámetros. Debido a que no se realiza tratamiento de
datos, tampoco es necesario construir una nueva gráfica de dispersión ni
formular una nueva conjetura.
\[ Y = a e^{bX} \]
Donde:
Una vez planteada la conjetura del modelo, se procede a estimar sus parámetros. A diferencia de un modelo lineal, el modelo exponencial no se ajusta directamente mediante mínimos cuadrados ordinarios sobre su forma original, ya que la ecuación es no lineal respecto a sus parámetros. Por esta razón, se aplica una linealización mediante logaritmo natural sobre la variable dependiente, lo que permite estimar el modelo lineal equivalente y posteriormente recuperar la ecuación exponencial original.
#===============================================================================
# 7. CÁLCULO DE PARÁMETROS
#===============================================================================
#------------------------------------------------------------------------------
# Validación técnica de los datos.
#
# Se conservan únicamente los pares de valores que pueden utilizarse en el ajuste
# del modelo exponencial. Esta validación no corresponde a un tratamiento
# estadístico; solo garantiza que los datos sean numéricos, finitos y que la
# variable dependiente cumpla la condición y > 0 para poder calcular ln(Y).
#------------------------------------------------------------------------------
TPV_modelo <- TPV %>%
filter(
!is.na(x),
!is.na(y),
is.finite(x),
is.finite(y),
x >= 0,
y > 0,
y <= 100
)
x <- TPV_modelo$x
y <- TPV_modelo$y
#------------------------------------------------------------------------------
# Linealización del modelo exponencial.
#
# Modelo original:
# Y = a e^(bX)
#
# Modelo linealizado:
# ln(Y) = ln(a) + bX
#------------------------------------------------------------------------------
ln_y <- log(y)
modelo_exp_linealizado <- lm(ln_y ~ x)
coeficientes <- coef(modelo_exp_linealizado)
A <- coeficientes[1]
b <- coeficientes[2]
a <- exp(A)
tabla_parametros <- data.frame(
Parámetro = c(
"Constante inicial (a)",
"Tasa de crecimiento exponencial (b)"
),
Valor = c(
a,
b
)
)
tabla_parametros %>%
gt() %>%
fmt_number(
columns = Valor,
decimals = 6
) %>%
cols_align(
align = "center"
) %>%
tab_header(
title = md("**Tabla N.°4. Parámetros estimados del modelo de regresión exponencial**")
) %>%
tab_options(
table.width = pct(80),
column_labels.font.weight = "bold"
)
| Tabla N.°4. Parámetros estimados del modelo de regresión exponencial | |
| Parámetro | Valor |
|---|---|
| Constante inicial (a) | 19.757931 |
| Tasa de crecimiento exponencial (b) | 0.000848 |
#===============================================================================
# ECUACIÓN DEL MODELO EXPONENCIAL
#===============================================================================
ecuacion <- paste0(
"CLAY_PCT = ",
round(a, 4),
" · e^(",
round(b, 6),
" · DEPTH_M)"
)
plot.new()
plot.window(
xlim = c(0, 100),
ylim = c(0, 100)
)
rect(
5, 58,
95, 92,
border = "#1F4E79",
lwd = 3
)
text(
50,
87,
"MODELO TEÓRICO",
font = 2,
cex = 1.45,
col = "#1F4E79"
)
text(
50,
72,
"CLAY_PCT = a · e^(b · DEPTH_M)",
font = 2,
cex = 1.20,
col = "#C0392B"
)
rect(
5, 8,
95, 48,
border = "#1F4E79",
lwd = 3
)
text(
50,
43,
"MODELO EXPONENCIAL AJUSTADO",
font = 2,
cex = 1.30,
col = "#1F4E79"
)
text(
50,
24,
ecuacion,
font = 2,
cex = 1.05,
col = "#C0392B"
)
text(
50,
3,
"Ecuación obtenida mediante linealización y mínimos cuadrados ordinarios.",
cex = 0.82,
col = "gray40"
)
box()
Una vez estimados los parámetros del modelo exponencial y
reconstruida la ecuación original, se comparan los valores observados
con la curva ajustada. Esta superposición permite evaluar visualmente si
el modelo representa adecuadamente la relación entre la profundidad del
fondo marino (DEPTH_M) y el porcentaje de arcilla
(CLAY_PCT).
#===============================================================================
# 8. REALIDAD Y MODELO
#===============================================================================
y_estimado <- a * exp(b * x)
orden <- order(x)
plot(
x,
y,
pch = 16,
cex = 0.48,
col = rgb(0, 0, 1, 0.22),
main = "Gráfica N.°2. Superposición del modelo exponencial\ncon las observaciones reales",
xlab = "DEPTH_M (Profundidad del fondo marino, m)",
ylab = "CLAY_PCT (Porcentaje de arcilla, %)"
)
lines(
x[orden],
y_estimado[orden],
col = "red3",
lwd = 3
)
grid()
box()
legend(
"topleft",
legend = c(
"Observaciones reales",
"Modelo exponencial"
),
pch = c(
16,
NA
),
lty = c(
NA,
1
),
lwd = c(
NA,
3
),
col = c(
rgb(0, 0, 1, 0.22),
"red3"
),
bty = "n"
)
Después de ajustar el modelo exponencial simple, se evalúa su
calidad mediante el coeficiente de correlación de Pearson y el
coeficiente de determinación. Debido a que el modelo exponencial se
estimó a partir de la ecuación linealizada, estos indicadores se
calculan sobre la relación entre DEPTH_M y
ln(CLAY_PCT).
#===============================================================================
# 9. TEST
#===============================================================================
r <- cor(x, ln_y)
R2 <- summary(modelo_exp_linealizado)$r.squared
tabla_tests <- data.frame(
Indicador = c(
"Coeficiente de correlación de Pearson (r)",
"Coeficiente de determinación (R²)"
),
Valor = c(
r,
R2
)
)
tabla_tests %>%
gt() %>%
cols_label(
Indicador = "Indicador estadístico",
Valor = "Valor"
) %>%
fmt_number(
columns = Valor,
decimals = 4
) %>%
cols_align(
align = "center"
) %>%
tab_header(
title = md("**Tabla N.°5. Indicadores estadísticos para evaluar la calidad del ajuste**")
) %>%
tab_options(
table.width = pct(85),
column_labels.font.weight = "bold"
)
| Tabla N.°5. Indicadores estadísticos para evaluar la calidad del ajuste | |
| Indicador estadístico | Valor |
|---|---|
| Coeficiente de correlación de Pearson (r) | 0.9467 |
| Coeficiente de determinación (R²) | 0.8962 |
Interpretación: El coeficiente de correlación de
Pearson obtenido fue r = 0.9467, lo que indica una
relación positiva muy fuerte entre la profundidad del fondo marino
(DEPTH_M) y el logaritmo natural del porcentaje de arcilla
(ln(CLAY_PCT)). Asimismo, el coeficiente de determinación
fue R² = 0.8962, indicando que el 89.62
% de la variabilidad observada en ln(CLAY_PCT) es
explicada por DEPTH_M, mientras que el 10.38
% restante se atribuye a otros factores no considerados en el
modelo.
Las restricciones del modelo exponencial están determinadas
por el intervalo observado de la variable independiente y por la
condición matemática aplicada durante la linealización. Debido a que se
utiliza ln(CLAY_PCT), el porcentaje de arcilla debe ser
mayor que cero. Además, las estimaciones deben realizarse dentro del
rango observado de profundidad para evitar extrapolaciones poco
confiables.
#===============================================================================
# 10. RESTRICCIONES
#===============================================================================
xmin <- min(x)
xmax <- max(x)
plot.new()
plot.window(
xlim = c(0, 100),
ylim = c(0, 100)
)
rect(
5, 10,
95, 90,
border = "#1F4E79",
lwd = 3
)
text(
50,
84,
"RESTRICCIONES DEL MODELO",
cex = 1.45,
font = 2,
col = "#1F4E79"
)
text(
50,
66,
"Condición de linealización:",
cex = 1.12,
font = 2
)
text(
50,
58,
"CLAY_PCT > 0",
cex = 1.30,
font = 2,
col = "#C0392B"
)
text(
50,
42,
"Rango observado del conjunto de datos:",
cex = 1.10,
font = 2
)
text(
50,
33,
paste0(
round(xmin, 2),
" <= DEPTH_M <= ",
round(xmax, 2),
" m"
),
cex = 1.15,
col = "#C0392B",
font = 2
)
text(
50,
18,
"No se recomienda extrapolar el modelo fuera del intervalo observado.",
cex = 0.82,
col = "gray40"
)
box()
En esta sección se utiliza el modelo de regresión exponencial
obtenido para estimar el porcentaje de arcilla (CLAY_PCT)
correspondiente a una profundidad específica del fondo marino
(DEPTH_M). Esta estimación debe interpretarse dentro del
intervalo observado y considerando que el modelo describe una tendencia
estadística, no una predicción exacta para todos los casos
individuales.
#===============================================================================
# 11. ESTIMACIÓN
#===============================================================================
x_estimacion <- 600
y_estimacion <- a * exp(b * x_estimacion)
plot.new()
plot.window(
xlim = c(0, 100),
ylim = c(0, 100)
)
rect(
5, 15,
95, 85,
border = "#1F4E79",
lwd = 3
)
text(
50,
79,
"ESTIMACIÓN DEL MODELO EXPONENCIAL",
cex = 1.25,
font = 2,
col = "#1F4E79"
)
text(
50,
63,
"Para una profundidad del fondo marino (DEPTH_M) igual a",
cex = 0.92
)
text(
50,
55,
paste0(
x_estimacion,
" m"
),
cex = 1.40,
font = 2,
col = "#C0392B"
)
text(
50,
43,
"el modelo estima un porcentaje de arcilla (CLAY_PCT) de:",
cex = 0.98
)
text(
50,
30,
paste0(
round(as.numeric(y_estimacion), 4),
" %"
),
cex = 2,
font = 2,
col = "#C0392B"
)
text(
50,
18,
"Estimación obtenida mediante el modelo de regresión exponencial ajustado.",
cex = 0.82,
col = "gray40"
)
box()
Interpretación: Para una profundidad del fondo
marino (DEPTH_M) de 600 m, el modelo de
regresión exponencial estima un porcentaje de arcilla
(CLAY_PCT) de 32.8668 %. Esta estimación
fue obtenida mediante la ecuación exponencial reconstruida y debe
interpretarse dentro del intervalo de aplicación establecido.
El análisis realizado permitió establecer que existe una
relación exponencial positiva entre la profundidad del fondo marino
(DEPTH_M) y el porcentaje de arcilla
(CLAY_PCT). A partir del diagrama de dispersión se formuló
la conjetura de un modelo de regresión exponencial simple, sin que fuera
necesario aplicar tratamientos estadísticos sobre los datos, debido a
que la nube de puntos presentó una tendencia creciente compatible con
una función exponencial. Mediante el proceso de linealización y el
método de mínimos cuadrados se obtuvo el modelo \(CLAY\_PCT = 19.7579 \times e^{8.48\times 10^{-4}
\times DEPTH\_M}\), el cual presentó un coeficiente de
correlación de Pearson de 0.9467** y un coeficiente de
determinación de 0.8962, lo que significa que el
89.62 % de la variabilidad de ln(CLAY_PCT)
es explicada por la profundidad del fondo marino. Finalmente, el modelo
permite realizar estimaciones dentro del rango observado de los datos;
por ejemplo, para una profundidad de 600 m se estimó un
porcentaje de arcilla de 32.8668 %.**