1. CARGA DE DATOS Y LIBRERÍAS

#===============================================================================
# 1. CARGA DE DATOS Y LIBRERÍAS
# Proyecto: Análisis de Regresión Logarítmica Simple aplicado a Sedimentos Marinos
#===============================================================================

#------------------------------------------------------------------------------
# Cargar las librerías necesarias
#------------------------------------------------------------------------------

library(dplyr)      # Manipulación de datos
library(gt)         # Creación de tablas profesionales
library(knitr)      # Integración de tablas en RMarkdown

#------------------------------------------------------------------------------
# Importar la base de datos
#------------------------------------------------------------------------------

datos <- read.csv(
  "C:/Users/Grace/Downloads/dataset_geologico_limpio_80.3.csv",
  header = TRUE,
  sep = ",",
  dec = ".",
  stringsAsFactors = FALSE
)

#------------------------------------------------------------------------------
# Resumen general de la base de datos
#------------------------------------------------------------------------------

resumen_bd <- data.frame(
  Descripción = c(
    "Número de observaciones",
    "Número de variables"
  ),
  Valor = c(
    nrow(datos),
    ncol(datos)
  )
)

#------------------------------------------------------------------------------
# Mostrar el resumen de la base de datos
#------------------------------------------------------------------------------

resumen_bd %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1. Resumen de Conjunto de Datos**")
  ) %>%
  cols_align(
    align = "center"
  ) %>%
  tab_options(
    table.width = pct(60),
    column_labels.font.weight = "bold"
  )
Tabla N°1. Resumen de Conjunto de Datos
Descripción Valor
Número de observaciones 27784
Número de variables 58

2. SELECCIÓN DE VARIABLES

Para el desarrollo del modelo de regresión Logarítmica se seleccionaron dos variables cuantitativas pertenecientes al conjunto de datos de sedimentos marinos. La variable independiente corresponde al porcentaje de arena presente en cada muestra (SAND_PCT), mientras que la variable dependiente corresponde al tamaño medio del grano (MEAN). Esta selección se fundamenta en que la composición granulométrica del sedimento influye directamente sobre el tamaño medio del grano, estableciendo una relación apropiada para el ajuste de un modelo de regresión Logarítmico.

#------------------------------------------------------------------------------
# Seleccionar las variables del análisis
#------------------------------------------------------------------------------

# Variable Independiente (X)
# SAND_PCT representa el porcentaje de arena presente en cada muestra
# de sedimento marino.

x <- as.numeric(datos$SAND_PCT)     # X (Porcentaje de arena)

# Variable Dependiente (Y)
# MEAN representa el tamaño medio del grano del sedimento.

y <- as.numeric(datos$MEAN)         # Y (Tamaño medio del grano)

#------------------------------------------------------------------------------
# Crear una tabla resumen de las variables seleccionadas
#------------------------------------------------------------------------------

tabla_variables <- data.frame(

  Rol = c("Variable Independiente (X)",
          "Variable Dependiente (Y)"),

  Variable = c("SAND_PCT",
               "MEAN"),

  Descripción = c("Porcentaje de arena (%)",
                  "Tamaño medio del grano (Φ)")

)

#------------------------------------------------------------------------------
# Mostrar la tabla de variables seleccionadas
#------------------------------------------------------------------------------

tabla_variables %>%

  gt() %>%

  tab_header(

    title = md("**Tabla N°2. Variables seleccionadas para el modelo de regresión Logarítmicol 
               aplicado al análisis de sedimentos marinos recolectados en Estados Unidos.**")

  ) %>%

  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 Logarítmicol aplicado al análisis de sedimentos marinos recolectados en Estados Unidos.
Rol Variable Descripción
Variable Independiente (X) SAND_PCT Porcentaje de arena (%)
Variable Dependiente (Y) MEAN Tamaño medio del grano (Φ)

3. TABLA DE PARES DE VALORES

Antes de ajustar el modelo de regresión logarítmica, es necesario verificar que el conjunto de datos contenga información válida, consistente y representativa del fenómeno estudiado. Para ello, se realizó un tratamiento de los datos que consistió en verificar la calidad de las observaciones, excluir registros con información inválida y agrupar observaciones repetidas. Este procedimiento permite ajustar el modelo utilizando únicamente pares de valores confiables, reduciendo la influencia de errores de registro y mejorando la representatividad del modelo respecto al comportamiento general de los sedimentos marinos.

3.1 Construcción de la tabla de pares de valores

El conjunto de datos contiene numerosas variables relacionadas con las características granulométricas de los sedimentos marinos. Sin embargo, para el ajuste del modelo de regresión únicamente se requieren la variable independiente y la variable dependiente. Por esta razón, se construye una tabla de pares de valores que contiene exclusivamente las variables seleccionadas para el análisis.

#==============================================================================
# 3.1 CONSTRUCCIÓN DE LA TABLA DE PARES DE VALORES
#==============================================================================

#------------------------------------------------------------------------------
# Construir una tabla que contiene únicamente las variables que participarán
# en el modelo de regresión logarítmica.
#
# X = SAND_PCT -> Porcentaje de arena presente en cada muestra.
# Y = MEAN     -> Tamaño medio del grano del sedimento.
#------------------------------------------------------------------------------

TPV <- data.frame(

  x = as.numeric(datos$SAND_PCT),

  y = as.numeric(datos$MEAN)

)

#------------------------------------------------------------------------------
# Registrar el número inicial de observaciones del conjunto de datos.
#
# Este valor servirá como referencia para conocer cuántos registros se
# conservan después del tratamiento de los datos.
#------------------------------------------------------------------------------

n_original <- nrow(TPV)

cat("Número inicial de observaciones:", n_original)
## Número inicial de observaciones: 27784

3.2 Verificación y exclusión de datos inválidos

Una vez construida la tabla de pares de valores, se verificó la calidad de la información contenida en el conjunto de datos. Para ello, se identificaron y excluyeron los registros con valores faltantes, infinitos o inconsistentes, ya que este tipo de observaciones no representa información válida para el ajuste del modelo de regresión y puede afectar la estimación de sus parámetros. En el caso de la variable independiente (SAND_PCT), además se verificó que los valores correspondieran a porcentajes físicamente posibles dentro del intervalo comprendido entre 0 % y 100 %. Debido a que posteriormente se aplicará una transformación logarítmica, también fue necesario garantizar que todos los valores de la variable independiente fueran estrictamente mayores que cero.

#==============================================================================
# 3.2 VERIFICACIÓN Y EXCLUSIÓN DE DATOS INVÁLIDOS
#==============================================================================

#------------------------------------------------------------------------------
# Identificar registros con valores faltantes (NA).
#------------------------------------------------------------------------------

n_na <- sum(!complete.cases(TPV))

#------------------------------------------------------------------------------
# Conservar únicamente las observaciones que contienen información válida.
#
# Se excluyen:
#
# • Valores faltantes (NA).
# • Valores infinitos o no finitos.
# • Valores inconsistentes.
#
# En este caso, SAND_PCT representa un porcentaje, por lo que únicamente
# puede tomar valores mayores que 0 y menores o iguales al 100 %.
#------------------------------------------------------------------------------

TPV_valida <- TPV %>%

  filter(

    !is.na(x),

    !is.na(y),

    is.finite(x),

    is.finite(y),

    x > 0,

    x <= 100

  )

#------------------------------------------------------------------------------
# Registrar el número de observaciones válidas.
#------------------------------------------------------------------------------

n_validos <- nrow(TPV_valida)

#------------------------------------------------------------------------------
# Calcular el número de observaciones excluidas durante esta etapa.
#------------------------------------------------------------------------------

n_invalidos <- n_original - n_validos

cat("Observaciones válidas:", n_validos, "\n")
## Observaciones válidas: 27025
cat("Observaciones excluidas:", n_invalidos)
## Observaciones excluidas: 759

3.3 Agrupación de observaciones repetidas

Durante la revisión del conjunto de datos se observó que algunos valores de la variable independiente se encontraban asociados a múltiples observaciones de la variable dependiente. En estos casos, se agruparon los registros repetidos y se calculó el promedio de la variable dependiente para obtener un único valor representativo por cada valor de la variable independiente. Este procedimiento permite construir un conjunto de pares de valores consistente, evita la repetición de una misma condición granulométrica y facilita el ajuste e interpretación del modelo de regresión logarítmica.

#==============================================================================
# 3.3 AGRUPACIÓN DE OBSERVACIONES REPETIDAS
#==============================================================================

#------------------------------------------------------------------------------
# Agrupar las observaciones que presentan el mismo valor de la variable
# independiente.
#
# Cuando un mismo valor de X aparece asociado a varias observaciones de Y,
# se calcula el promedio de la variable dependiente para obtener un único
# valor representativo de cada porcentaje de arena.
#------------------------------------------------------------------------------

TPV_agrupada <- TPV_valida %>%

  group_by(x) %>%

  summarise(

    y = mean(y, na.rm = TRUE),

    .groups = "drop"

  )

#------------------------------------------------------------------------------
# Registrar el número de observaciones después de la agrupación.
#------------------------------------------------------------------------------

n_agrupados <- nrow(TPV_agrupada)

#------------------------------------------------------------------------------
# Calcular cuántas observaciones fueron consolidadas durante la agrupación.
#------------------------------------------------------------------------------

n_reducidos <- n_validos - n_agrupados

cat("Observaciones después de la agrupación:", n_agrupados, "\n")
## Observaciones después de la agrupación: 9034
cat("Observaciones consolidadas:", n_reducidos)
## Observaciones consolidadas: 17991

3.4 Identificación y exclusión de valores atípicos mediante el método IQR

Una vez obtenido un único valor representativo de la variable dependiente para cada valor de la variable independiente, se evaluó la presencia de valores atípicos mediante el método del rango intercuartílico (IQR). Debido a que las observaciones extremas pueden influir significativamente en la estimación de los parámetros del modelo de regresión, el procedimiento se aplicó tanto a la variable independiente (SAND_PCT) como a la variable dependiente (MEAN). De esta manera, se excluyeron únicamente las observaciones identificadas como atípicas, conservando los pares de valores que representan el comportamiento predominante del conjunto de datos y permitiendo obtener un modelo logarítmico más representativo y estable.

#==============================================================================
# 3.4 IDENTIFICACIÓN Y EXCLUSIÓN DE VALORES ATÍPICOS
#     MEDIANTE EL MÉTODO IQR
#==============================================================================

#------------------------------------------------------------------------------
# Calcular el primer cuartil (Q1), tercer cuartil (Q3) y el rango
# intercuartílico (IQR) de la variable independiente.
#
# El método IQR permite identificar observaciones alejadas del comportamiento
# general de los datos sin asumir una distribución específica.
#------------------------------------------------------------------------------

Q1_x <- quantile(TPV_agrupada$x, 0.25, na.rm = TRUE)

Q3_x <- quantile(TPV_agrupada$x, 0.75, na.rm = TRUE)

IQR_x <- IQR(TPV_agrupada$x, na.rm = TRUE)

#------------------------------------------------------------------------------
# Calcular los límites de aceptación para la variable independiente.
#------------------------------------------------------------------------------

LI_x <- Q1_x - 1.5 * IQR_x

LS_x <- Q3_x + 1.5 * IQR_x

#------------------------------------------------------------------------------
# Calcular el primer cuartil (Q1), tercer cuartil (Q3) y el rango
# intercuartílico (IQR) de la variable dependiente.
#------------------------------------------------------------------------------

Q1_y <- quantile(TPV_agrupada$y, 0.25, na.rm = TRUE)

Q3_y <- quantile(TPV_agrupada$y, 0.75, na.rm = TRUE)

IQR_y <- IQR(TPV_agrupada$y, na.rm = TRUE)

#------------------------------------------------------------------------------
# Calcular los límites de aceptación para la variable dependiente.
#------------------------------------------------------------------------------

LI_y <- Q1_y - 1.5 * IQR_y

LS_y <- Q3_y + 1.5 * IQR_y

#------------------------------------------------------------------------------
# Conservar únicamente las observaciones comprendidas dentro de los límites
# establecidos por el método IQR para ambas variables.
#
# Las observaciones identificadas como atípicas se excluyen del ajuste del
# modelo debido a que pueden influir de manera desproporcionada en la
# estimación de los parámetros de la regresión logarítmica.
#------------------------------------------------------------------------------

TPV_final <- TPV_agrupada %>%

  filter(

    x >= LI_x,

    x <= LS_x,

    y >= LI_y,

    y <= LS_y

  )

#------------------------------------------------------------------------------
# Registrar el número final de observaciones utilizadas en el modelo.
#------------------------------------------------------------------------------

n_final <- nrow(TPV_final)

#------------------------------------------------------------------------------
# Calcular el número de observaciones identificadas como atípicas.
#------------------------------------------------------------------------------

n_outliers <- n_agrupados - n_final

cat("Observaciones utilizadas en el modelo:", n_final, "\n")
## Observaciones utilizadas en el modelo: 8625
cat("Observaciones atípicas excluidas:", n_outliers)
## Observaciones atípicas excluidas: 409

3.5 Conjunto final de pares de valores

Después del tratamiento y depuración del conjunto de datos se obtuvo el conjunto final de pares de valores que será utilizado para construir el diagrama de dispersión y ajustar el modelo de regresión logarítmica. Este conjunto representa las observaciones válidas, consistentes y representativas sobre las cuales se estimarán los parámetros del modelo y se realizarán las interpretaciones correspondientes.

#==============================================================================
# 3.5 CONJUNTO FINAL DE PARES DE VALORES
#==============================================================================

TPV_tabla <- TPV_final

TPV_tabla$Nro <- 1:nrow(TPV_tabla)

TPV_tabla <- TPV_tabla %>%
  select(
    Nro,
    everything()
  )

head(TPV_tabla,20) %>%
  gt() %>%
  cols_label(
    Nro = "N°",
    x = "SAND_PCT (%)",
    y = "MEAN (Φ)"
  ) %>%
  tab_header(
    title = md("**Tabla N.°3. Conjunto final de pares de valores utilizados para el ajuste del modelo de regresión logarítmica.**")
  ) %>%
  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. Conjunto final de pares de valores utilizados para el ajuste del modelo de regresión logarítmica.
SAND_PCT (%) MEAN (Φ)
1 2.5572 2.9012
2 2.9854 2.7664
3 3.3500 2.7757
4 3.5100 2.8519
5 3.6100 2.7906
6 3.6300 2.7989
7 3.6400 2.7771
8 3.6800 2.9335
9 3.7000 2.8314
10 3.7300 2.8098
11 3.7500 2.8559
12 3.7600 2.8321
13 3.7900 2.8277
14 3.8100 2.8707
15 3.8200 2.8099
16 3.8300 2.9298
17 3.8600 2.7775
18 3.8800 2.8882
19 3.9000 2.8235
20 3.9100 2.9248
#------------------------------------------------------------------------------
# Definir las variables finales del modelo.
# Estas variables ya provienen del conjunto depurado, agrupado y filtrado por IQR.
#------------------------------------------------------------------------------

x <- TPV_final$x

y <- TPV_final$y

4. DIAGRAMA DE DISPERSIÓN

El diagrama de dispersión constituye el punto de partida del análisis de regresión, ya que permite observar la distribución de las observaciones y el comportamiento existente entre la variable independiente y la variable dependiente. A partir de esta representación gráfica será posible formular una conjetura acerca del tipo de función matemática que podría describir la relación entre ambas variables. En este caso, el objetivo es evaluar si la relación observada entre el porcentaje de arena (SAND_PCT) y el tamaño medio del grano (MEAN) puede representarse adecuadamente mediante un modelo de regresión logarítmica.

#------------------------------------------------------------------------------
# Selección de una muestra aleatoria para la visualización.
#------------------------------------------------------------------------------

# El conjunto de datos contiene miles de observaciones. Si todas se
# representaran simultáneamente, muchos puntos quedarían superpuestos,
# dificultando la interpretación visual de la nube de dispersión.
#
# Por esta razón se selecciona una muestra aleatoria representativa únicamente
# con fines de visualización.
#
# IMPORTANTE:
# El modelo de regresión logarítmica NO se ajustará utilizando esta muestra,
# sino con la totalidad de las observaciones depuradas.

set.seed(2026)

indice_visual <- sample(

  1:length(x),

  min(3000,length(x))

)

#------------------------------------------------------------------------------
# Configuración gráfica.
#------------------------------------------------------------------------------

par(oma=c(1,1,1,1))

#------------------------------------------------------------------------------
# Construcción del diagrama de dispersión.
#------------------------------------------------------------------------------

plot(

  x[indice_visual],

  y[indice_visual],

  pch=16,

  cex=0.7,

  col=rgb(0,0,1,0.35),

  main="Gráfica N.°1. Diagrama de dispersión entre SAND_PCT y MEAN",

  xlab="SAND_PCT (Porcentaje de arena, %)",

  ylab="MEAN (Tamaño medio del grano, Φ)"

)

grid()

box(which="outer")

La nube de puntos evidencia una relación creciente entre el porcentaje de arena (SAND_PCT) y el tamaño medio del grano (MEAN). Además, se observa que el incremento del tamaño medio del grano es más pronunciado para valores bajos de porcentaje de arena y tiende a disminuir conforme esta variable aumenta. Este comportamiento sugiere una relación no lineal compatible con una función logarítmica, constituyendo la base para plantear la conjetura del modelo en la siguiente sección.

5. CONJETURA DEL MODELO

La conjetura del modelo consiste en plantear una hipótesis acerca del tipo de función matemática que podría describir la relación observada entre las variables. Para ello, se analiza la forma de la nube de puntos obtenida en el diagrama de dispersión, identificando el comportamiento que mejor representa la distribución de las observaciones. Esta etapa corresponde a una hipótesis inicial que posteriormente será comprobada mediante la estimación de los parámetros del modelo y su comparación con las observaciones reales.

Forma general del modelo propuesto

Y=a+bln(X)

Y = MEAN

X = SAND_PCT

ln(X) = logaritmo natural de X

Al analizar la forma de la nube de puntos presentada en la Gráfica N.°1, se observa una tendencia creciente cuya pendiente disminuye progresivamente conforme aumenta el porcentaje de arena. Este comportamiento es característico de una función logarítmica; por ello, se plantea como hipótesis que un modelo de regresión logarítmica podría describir la relación entre las variables. Esta conjetura será comprobada en las siguientes etapas del análisis.

6. PARÁMETROS DEL MODELO

Una vez seleccionado el modelo logarítmico, es necesario estimar sus parámetros para obtener la ecuación matemática que describe la relación entre el porcentaje de arena y el tamaño medio del grano. Estos parámetros corresponden al intercepto y a la pendiente, los cuales determinan la posición y la forma de la curva de regresión. La interpretación de dichos parámetros permite comprender cómo varía el tamaño medio del grano conforme aumenta el porcentaje de arena presente en los sedimentos marinos.

#==============================================================================
# 6. PARÁMETROS DEL MODELO
#==============================================================================

#------------------------------------------------------------------------------
# Ajuste del modelo de regresión logarítmica
#
# En esta etapa se estiman los parámetros del modelo mediante el método de
# mínimos cuadrados ordinarios.
#
# Modelo teórico:
#
#              Y = a + b·ln(X)
#
# donde:
#
# Y = Tamaño medio del grano (MEAN)
# X = Porcentaje de arena (SAND_PCT)
#------------------------------------------------------------------------------

modelo_log <- lm(
  y ~ log(x)
)

#------------------------------------------------------------------------------
# Obtener los coeficientes estimados del modelo.
#------------------------------------------------------------------------------

coeficientes <- coef(modelo_log)

#------------------------------------------------------------------------------
# Intercepto del modelo (a).
#
# Representa el valor esperado del tamaño medio del grano cuando
# ln(SAND_PCT)=0, es decir, cuando SAND_PCT = 1 %.
#------------------------------------------------------------------------------
intercepto <- coeficientes[1]

#------------------------------------------------------------------------------
# Pendiente del modelo (b).
#
# Indica la variación promedio esperada del tamaño medio del grano
# por cada incremento de una unidad en el logaritmo natural del
# porcentaje de arena.
#------------------------------------------------------------------------------
pendiente <- coeficientes[2]

#------------------------------------------------------------------------------
# Construcción de la tabla de parámetros estimados.
#------------------------------------------------------------------------------

tabla_parametros <- data.frame(

  Parámetro = c(

    "Intercepto (a)",

    "Pendiente (b)"

  ),

  Valor = c(

    intercepto,

    pendiente

  )

)

#------------------------------------------------------------------------------
# Mostrar la tabla de parámetros.
#------------------------------------------------------------------------------

tabla_parametros %>%

  gt() %>%

  fmt_number(

    columns = Valor,

    decimals = 4

  ) %>%

  cols_align(

    align = "center"

  ) %>%

  tab_header(

title = md("**Tabla N.°5. Parámetros estimados del modelo de regresión logarítmica
           entre el porcentaje de arena (SAND_PCT) y el tamaño medio del grano (MEAN)
           del conjunto de datos de sedimentos marinos.**")

  ) %>%

  tab_options(

    table.width = pct(80),

    column_labels.font.weight = "bold"

  )
Tabla N.°5. Parámetros estimados del modelo de regresión logarítmica entre el porcentaje de arena (SAND_PCT) y el tamaño medio del grano (MEAN) del conjunto de datos de sedimentos marinos.
Parámetro Valor
Intercepto (a) 1.6658
Pendiente (b) 0.7634

Los parámetros estimados corresponden al intercepto (a) y a la pendiente (b) del modelo logarítmico. Estos coeficientes permiten construir la ecuación ajustada que describe matemáticamente la relación existente entre el porcentaje de arena (SAND_PCT) y el tamaño medio del grano (MEAN), constituyendo la base para realizar estimaciones e interpretar el comportamiento granulométrico de los sedimentos marinos analizados.

6.1 Ecuación del modelo logarítmico

#==============================================================================
# 6.1 ECUACIÓN DEL MODELO LOGARÍTMICO
#==============================================================================

#------------------------------------------------------------------------------
# Construcción automática de la ecuación ajustada
#------------------------------------------------------------------------------

ecuacion <- paste0(

  "MEAN (Φ) = ",

  round(intercepto,4),

  ifelse(pendiente >= 0, " + ", " - "),

  round(abs(pendiente),4),

  " · ln(SAND_PCT)"

)

#------------------------------------------------------------------------------
# Configuración del área gráfica
#------------------------------------------------------------------------------

plot.new()

plot.window(

  xlim = c(0,100),

  ylim = c(0,100)

)

#==============================================================================
# MODELO TEÓRICO
#==============================================================================

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,

  "MEAN (Φ) = a + b · ln(SAND_PCT)",

  font = 2,

  cex = 1.30,

  col = "#C0392B"

)

#==============================================================================
# MODELO AJUSTADO
#==============================================================================

rect(

  5,8,

  95,48,

  border = "#1F4E79",

  lwd = 3

)

text(

  50,

  43,

  "MODELO LOGARÍTMICO AJUSTADO",

  font = 2,

  cex = 1.45,

  col = "#1F4E79"

)

text(

  50,

  24,

  ecuacion,

  font = 2,

  cex = 1.18,

  col = "#C0392B"

)

#------------------------------------------------------------------------------
# Nota inferior
#------------------------------------------------------------------------------

text(

  50,

  3,

  "Ecuación obtenida mediante el método de mínimos cuadrados.",

  cex = 0.85,

  col = "gray40"

)

box()

7. REALIDAD Y MODELO

Una vez estimados los parámetros del modelo de regresión logarítmica, se compara gráficamente la curva ajustada con las observaciones reales del conjunto de datos. Esta superposición permite verificar visualmente si el modelo obtenido representa adecuadamente la relación existente entre el porcentaje de arena (SAND_PCT) y el tamaño medio del grano (MEAN). La comparación constituye una validación gráfica previa a la evaluación estadística mediante el coeficiente de correlación de Pearson y el coeficiente de determinación (R²).

#==============================================================================
# 7. SUPERPOSICIÓN DEL MODELO CON LA REALIDAD
#==============================================================================

#------------------------------------------------------------------------------
# Construcción de una secuencia ordenada de valores de la variable
# independiente para dibujar una curva continua.
#------------------------------------------------------------------------------

x_modelo <- seq(
  from = min(x),
  to = max(x),
  length.out = 300
)

#------------------------------------------------------------------------------
# Calcular los valores estimados por el modelo para cada valor de x_modelo.
#------------------------------------------------------------------------------

y_modelo <- predict(
  modelo_log,
  newdata = data.frame(
    x = x_modelo
  )
)

#------------------------------------------------------------------------------
# Configuración gráfica.
#------------------------------------------------------------------------------

par(oma = c(1,1,1,1))

#------------------------------------------------------------------------------
# Gráfico de las observaciones reales.
#------------------------------------------------------------------------------

plot(

  x,

  y,

  pch = 16,

  cex = 0.55,

  col = rgb(0,0,1,0.30),

  main = "Gráfica N.°2. Superposición del modelo logarítmico \ncon las observaciones reales",

  xlab = "SAND_PCT (Porcentaje de arena, %)",

  ylab = "MEAN (Tamaño medio del grano, Φ)"

)

#------------------------------------------------------------------------------
# Superponer la curva ajustada.
#------------------------------------------------------------------------------

lines(

  x_modelo,

  y_modelo,

  col = "red3",

  lwd = 3

)

#------------------------------------------------------------------------------
# Agregar cuadrícula para facilitar la lectura.
#------------------------------------------------------------------------------

grid()

#------------------------------------------------------------------------------
# Agregar un marco al gráfico.
#------------------------------------------------------------------------------

box(which = "outer")

#------------------------------------------------------------------------------
# Incorporar la leyenda.
#------------------------------------------------------------------------------

legend(

  "bottomright",

  legend = c(

    "Observaciones reales",

    "Modelo logarítmico ajustado"

  ),

  pch = c(

    16,

    NA

  ),

  lty = c(

    NA,

    1

  ),

  lwd = c(

    NA,

    3

  ),

  col = c(

    rgb(0,0,1,0.30),

    "red3"

  ),

  bty = "n"

)

La superposición entre las observaciones reales y la curva ajustada evidencia que el modelo logarítmico representa satisfactoriamente la tendencia general del conjunto de datos. Se observa que la curva sigue el comportamiento predominante de las observaciones, describiendo de manera adecuada la relación existente entre el porcentaje de arena (SAND_PCT) y el tamaño medio del grano (MEAN). Las diferencias entre algunos puntos y la curva corresponden a la variabilidad natural presente en los sedimentos marinos y a factores adicionales que no forman parte del modelo de regresión.

8. TEST DE PEARSON

Después de verificar visualmente la correspondencia entre el modelo ajustado y las observaciones reales, se procede a evaluar cuantitativamente la calidad del ajuste mediante el coeficiente de correlación de Pearson y el coeficiente de determinación (R²). Estos indicadores permiten medir la intensidad de la relación entre las variables y la capacidad explicativa del modelo de regresión.

#==============================================================================
# 8. TEST DE PEARSON
#==============================================================================

#------------------------------------------------------------------------------
# Obtener los valores estimados por el modelo.
#------------------------------------------------------------------------------

y_estimado <- predict(modelo_log)

#------------------------------------------------------------------------------
# Calcular el coeficiente de correlación de Pearson entre los valores
# observados y los valores estimados.
#------------------------------------------------------------------------------

r <- cor(log(x), y)

#------------------------------------------------------------------------------
# Calcular el coeficiente de determinación (R²).
#------------------------------------------------------------------------------

R2 <- summary(modelo_log)$r.squared

#------------------------------------------------------------------------------
# Construcción de la tabla de indicadores estadísticos.
#------------------------------------------------------------------------------

tabla_tests <- data.frame(

  Indicador = c(

    "Coeficiente de correlación de Pearson (r)",

    "Coeficiente de determinación (R²)"

  ),

  Valor = c(

    r,

    R2

  )

)

#------------------------------------------------------------------------------
# Mostrar la tabla de resultados.
#------------------------------------------------------------------------------

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.°6. Indicadores estadísticos para evaluar la calidad del ajuste del modelo de regresión logarítmica.**")

  ) %>%

  tab_options(

    table.width = pct(85),

    column_labels.font.weight = "bold"

  )
Tabla N.°6. Indicadores estadísticos para evaluar la calidad del ajuste del modelo de regresión logarítmica.
Indicador estadístico Valor
Coeficiente de correlación de Pearson (r) 0.9794
Coeficiente de determinación (R²) 0.9592

El coeficiente de correlación de Pearson obtenido (r = 0.9794) evidencia una relación positiva muy fuerte entre los valores observados y los valores estimados por el modelo. Asimismo, el coeficiente de determinación (R² = 0.9592) indica que aproximadamente el 95.92 % de la variabilidad observada en el tamaño medio del grano (MEAN) es explicada por el porcentaje de arena (SAND_PCT), mientras que el 4.08 % restante puede atribuirse a otros factores sedimentológicos no considerados en este análisis. En conjunto, estos resultados muestran que el modelo logarítmico representa satisfactoriamente la relación existente entre ambas variables.

9. RESTRICCIONES DEL MODELO

Las restricciones se establecen mediante el dominio del porcentaje de arena (SAND_PCT), el dominio observado del tamaño medio del grano (MEAN) y la interpretación de los posibles resultados negativos en la escala granulométrica \(\Phi\).

9.1 Dominio de X

La variable SAND_PCT es un porcentaje, por lo que físicamente se encuentra entre 0 % y 100 %. Sin embargo, el modelo contiene \(\ln(X)\), que solo está definido cuando \(X>0\). Además, para evitar extrapolaciones se utiliza el intervalo realmente observado.

xmin <- min(x, na.rm = TRUE)
xmax <- max(x, na.rm = TRUE)

cat("Dominio matemático: SAND_PCT > 0\n")
## Dominio matemático: SAND_PCT > 0
cat(
  "Dominio observado:",
  round(xmin, 2), "<= SAND_PCT <=",
  round(xmax, 2), "\n"
)
## Dominio observado: 2.56 <= SAND_PCT <= 100

\[ D_X=[\,2.56,\;100\,]\%. \]

9.2 Dominio de Y

La variable MEAN representa el tamaño medio del grano en escala \(\Phi\). Su dominio observado se obtiene a partir de los valores utilizados para ajustar el modelo.

ymin <- min(y, na.rm = TRUE)
ymax <- max(y, na.rm = TRUE)

cat(
  "Dominio observado de Y:",
  round(ymin, 4), "<= MEAN <=",
  round(ymax, 4), "Phi\n"
)
## Dominio observado de Y: 2.7602 <= MEAN <= 5.5968 Phi

\[ D_Y=[\,2.7602,\;5.5968\,]\Phi. \]

9.3 Interpretación de valores negativos de Y

El modelo ajustado tiene la forma:

\[ \widehat{Y}=a+b\ln(X). \]

Para identificar el porcentaje de arena donde la predicción es igual a \(0\Phi\), se resuelve:

\[ 0=a+b\ln(X) \quad\Longrightarrow\quad X=e^{-a/b}. \]

x_corte_cero <- exp(-intercepto / pendiente)

cat(
  "El modelo estima MEAN = 0 Phi cuando SAND_PCT =",
  round(x_corte_cero, 4), "%\n"
)
## El modelo estima MEAN = 0 Phi cuando SAND_PCT = 0.1128 %

Este resultado es únicamente una referencia algebraica. Una predicción negativa de MEAN no representa un tamaño físico negativo, sino un grano de mayor diámetro dentro de la escala \(\Phi\). Por ello, no se impone la condición \(\widehat{Y}\geq0\). La restricción necesaria es que SAND_PCT sea mayor que cero y permanezca dentro del rango observado.

Restricción final del modelo

restriccion_final <- paste0(
  round(xmin, 2),
  " <= SAND_PCT <= ",
  round(xmax, 2),
  " %"
)

plot.new()
plot.window(xlim = c(0, 100), ylim = c(0, 100))

rect(
  5, 18,
  95, 82,
  border = "#1F4E79",
  lwd = 3
)

text(
  50, 72,
  "RESTRICCIÓN FINAL DEL MODELO",
  cex = 1.40,
  font = 2,
  col = "#1F4E79"
)

text(
  50, 51,
  restriccion_final,
  cex = 1.45,
  font = 2,
  col = "#C0392B"
)

text(
  50, 32,
  "Intervalo observado recomendado",
  cex = 0.95,
  col = "gray40"
)

text(
  50, 26,
  "para respetar ln(X) y evitar extrapolaciones.",
  cex = 0.88,
  col = "gray40"
)

box()

El modelo logarítmico debe aplicarse dentro del intervalo final mostrado. En este rango, el logaritmo está definido y las estimaciones se encuentran respaldadas por los datos observados.

10. ESTIMACIÓN MEDIANTE EL MODELO

Una de las principales aplicaciones de los modelos de regresión consiste en estimar el valor esperado de una variable dependiente a partir de un valor conocido de la variable independiente. En esta sección se utiliza el modelo de regresión logarítmica obtenido para estimar el tamaño medio del grano (MEAN) correspondiente a un porcentaje específico de arena (SAND_PCT). Debido a que el valor seleccionado pertenece al intervalo observado en el conjunto de datos, la estimación corresponde a una interpolación, por lo que el resultado puede considerarse confiable dentro del dominio del modelo.

#==============================================================================
# 10. ESTIMACIÓN MEDIANTE EL MODELO
#==============================================================================

#------------------------------------------------------------------------------
# Valor de la variable independiente para realizar la estimación.
#------------------------------------------------------------------------------

x_estimacion <- 60

#------------------------------------------------------------------------------
# Estimar el valor esperado de la variable dependiente utilizando
# el modelo de regresión logarítmica.
#------------------------------------------------------------------------------

y_estimacion <- predict(

  modelo_log,

  newdata = data.frame(

    x = x_estimacion

  )

)

#------------------------------------------------------------------------------
# Configuración del área gráfica.
#------------------------------------------------------------------------------

plot.new()

plot.window(

  xlim = c(0,100),

  ylim = c(0,100)

)

#------------------------------------------------------------------------------
# Recuadro principal.
#------------------------------------------------------------------------------

rect(

  5,15,

  95,85,

  border = "#1F4E79",

  lwd = 3

)

#------------------------------------------------------------------------------
# Título.
#------------------------------------------------------------------------------

text(

  50,

  79,

  "ESTIMACIÓN DEL MODELO LOGARÍTMICO",

  cex = 1.35,

  font = 2,

  col = "#1F4E79"

)

#------------------------------------------------------------------------------
# Descripción.
#------------------------------------------------------------------------------

text(

  50,

  63,

  paste(

    "Para una muestra con un porcentaje",

    "de arena (SAND_PCT) igual a"

  ),

  cex = 0.98

)

text(

  50,

  55,

  paste0(

    x_estimacion,

    " %"

  ),

  cex = 1.40,

  font = 2,

  col = "#C0392B"

)

text(

  50,

  43,

  "el modelo estima un tamaño medio del grano (MEAN) de:",

  cex = 1.05

)

#------------------------------------------------------------------------------
# Resultado de la estimación.
#------------------------------------------------------------------------------

text(

  50,

  30,

  paste0(

    round(y_estimacion,4),

    " Φ"

  ),

  cex = 2,

  font = 2,

  col = "#C0392B"

)

#------------------------------------------------------------------------------
# Nota inferior.
#------------------------------------------------------------------------------

text(

  50,

  18,

  "Estimación obtenida mediante el modelo de regresión logarítmica ajustado.",

  cex = 0.85,

  col = "gray40"

)

box()

Interpretación

Para una muestra de sedimento marino con un porcentaje de arena (SAND_PCT) igual al 60%, el modelo de regresión logarítmica estima un tamaño medio del grano (MEAN) de 4.7914 Φ. Debido a que este valor pertenece al intervalo de observaciones utilizado para ajustar el modelo (2.56 ≤ SAND_PCT ≤ 100), la estimación corresponde a una interpolación, por lo que puede considerarse.Que esté dentro del rango no garantiza total confiabilidad.

El modelo obtenido permite estimar el tamaño medio del grano de los sedimentos marinos a partir del porcentaje de arena presente en una muestra, constituyendo una herramienta de apoyo para estudios granulométricos y análisis sedimentológicos cuando no se dispone de mediciones directas del tamaño medio del grano.

11. CONCLUSIÓN

Entre el porcentaje de arena (SAND_PCT) y el tamaño medio del grano (MEAN) existe una relación logarítmica positiva, representada por el modelo \(\widehat{Y}=\) 1.6658 \(+\) 0.7634 \(\ln(X)\). El coeficiente de determinación indica que el 95.92 % de la variabilidad del tamaño medio del grano depende del porcentaje de arena, mientras que el 4.08 % restante se relaciona con otros factores sedimentológicos no incluidos en el modelo. Por tanto, el modelo logarítmico permite realizar estimaciones dentro del dominio establecido.