1. LIBRERÍAS

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

2. CARGA DE DATOS

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

3. SELECCIÓN DE VARIABLES

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 (%)

4. TABLA DE PARES DE VALORES

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
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

5. GRÁFICA DE DISPERSIÓN

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()

6. CONJETURA DEL MODELO

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.

6.1 JUSTIFICACIÓN DE NO APLICACIÓN DE TRATAMIENTO

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.

Forma general del modelo propuesto

\[ Y = a e^{bX} \]

Donde:

  • Y = CLAY_PCT
  • X = DEPTH_M
  • a = Constante inicial del modelo
  • b = Tasa de crecimiento exponencial
  • e = Base de los logaritmos naturales

7. CÁLCULO DE PARÁMETROS

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()

8. REALIDAD Y MODELO

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"
)

9. TEST

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.

10. RESTRICCIONES

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()

11. ESTIMACIÓN

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.

12. CONCLUSIÓN

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 %.**