#===============================================================================
# 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 |
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 promedio de sus partículas, estableciendo una relación de causa y efecto 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 (Φ) |
Antes de ajustar el modelo de regresión, es necesario verificar que el conjunto de datos contenga información válida, consistente y representativa. Para ello, se realizó un tratamiento de los datos que consistió en verificar la calidad de las observaciones, agrupar registros repetidos y reducir la influencia de valores atípicos. Este procedimiento permite ajustar el modelo de regresión utilizando información confiable y representativa del fenómeno analizado.
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 únicamente con las variables que participarán en el modelo.
#
# X = SAND_PCT -> Porcentaje de arena.
# Y = MEAN -> Tamaño medio del grano.
#------------------------------------------------------------------------------
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 datos.
#------------------------------------------------------------------------------
n_original <- nrow(TPV)
cat("Número inicial de observaciones:", n_original)
## Número inicial de observaciones: 27784
3.2 Verificación y eliminació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 eliminaron 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 los parámetros del modelo de regresión durante el análisis.
#==============================================================================
# 3.2 VERIFICACIÓN Y ELIMINACIÓ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 eliminan:
# • Valores faltantes (NA).
# • Valores infinitos o no finitos.
# • Valores inconsistentes para la variable independiente.
#
# 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), # Eliminar valores faltantes en X
!is.na(y), # Eliminar valores faltantes en Y
is.finite(x), # Eliminar valores infinitos en X
is.finite(y), # Eliminar valores infinitos en Y
x > 0, # El porcentaje debe ser mayor que cero
x <= 100 # El porcentaje no puede superar el 100 %
)
#------------------------------------------------------------------------------
# Registrar el número de observaciones válidas.
#------------------------------------------------------------------------------
n_validos <- nrow(TPV_valida)
#------------------------------------------------------------------------------
# Calcular el número total de registros eliminados.
#------------------------------------------------------------------------------
n_invalidos <- n_original - n_validos
cat("Observaciones válidas:", n_validos, "\n")
## Observaciones válidas: 27025
cat("Observaciones eliminadas:", n_invalidos)
## Observaciones eliminadas: 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 y facilita el ajuste e interpretación del modelo de regresión.
#==============================================================================
# 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.
#------------------------------------------------------------------------------
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 reducción de la influencia 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). Este procedimiento permitió identificar las observaciones que se alejaban del comportamiento general de los datos. Para el ajuste del modelo de regresión, se trabajó únicamente con las observaciones comprendidas dentro de los límites establecidos por el método IQR, con el fin de evitar que valores extremos influyeran de manera desproporcionada en la estimación de los parámetros del modelo.
#==============================================================================
# 3.4 IDENTIFICACIÓN Y TRATAMIENTO 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 dependiente.
#
# El método IQR permite identificar observaciones alejadas del comportamiento
# general de los datos sin asumir una distribución específica.
#------------------------------------------------------------------------------
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 inferior y superior para identificar observaciones
# atípicas utilizando el criterio de 1.5 veces el IQR.
#------------------------------------------------------------------------------
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.
#
# Las observaciones identificadas como atípicas no se utilizan para el ajuste
# del modelo de regresión debido a que pueden influir de manera
# desproporcionada en la estimación de sus parámetros.
#------------------------------------------------------------------------------
TPV_final <- TPV_agrupada %>%
filter(
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 identificadas:", n_outliers)
## Observaciones atípicas identificadas: 409
3.5 Conjunto final de pares de valores
Después del tratamiento de los 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. 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
#==============================================================================
#------------------------------------------------------------------------------
# Numerar las observaciones del conjunto final.
#------------------------------------------------------------------------------
TPV_tabla <- TPV_final
TPV_tabla$Nro <- 1:nrow(TPV_tabla)
#------------------------------------------------------------------------------
# Reordenar las columnas para facilitar la lectura.
#------------------------------------------------------------------------------
TPV_tabla <- TPV_tabla %>%
select(
Nro,
everything()
)
#------------------------------------------------------------------------------
# Mostrar únicamente las primeras observaciones del conjunto final.
#
# Por motivos de presentación, únicamente se muestran los primeros registros,
# aunque el modelo utiliza la totalidad de las observaciones disponibles.
#------------------------------------------------------------------------------
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. | ||
| N° | 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.
#------------------------------------------------------------------------------
x <- TPV_final$x
y <- TPV_final$y
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 que podría describir la relación entre ambas variables.
#------------------------------------------------------------------------------
# Selección de una muestra aleatoria para la visualización
#------------------------------------------------------------------------------
# La base de datos contiene miles de observaciones. Si se graficaran todos
# los puntos, la nube sería difícil de interpretar debido al sobrelapamiento.
#
# Por esta razón se selecciona una muestra aleatoria representativa únicamente
# para fines de visualización.
#
# IMPORTANTE:
# La regresión logarítmico NO se realizará con esta muestra, sino con la totalidad
# de los datos depurados.
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],
# Apariencia de los puntos
pch = 16,
cex = 0.7,
col = rgb(0,0,1,0.35),
# Título de la gráfica
main = "Gráfica N.°1. Diagrama de dispersión entre SAND_PCT y MEAN",
# Etiquetas de los ejes
xlab = "SAND_PCT (Porcentaje de arena, %)",
ylab = "MEAN (Tamaño medio del grano, Φ)"
)
#------------------------------------------------------------------------------
# Agregar una cuadrícula para facilitar la lectura del gráfico
#------------------------------------------------------------------------------
grid()
#------------------------------------------------------------------------------
# Dibujar un marco alrededor de la gráfica
#------------------------------------------------------------------------------
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 crecimiento no es constante, lo que sugiere la presencia de una relación no lineal entre ambas variables. Esta distribución servirá como base para plantear la conjetura del modelo en la siguiente sección.
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.
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 ajustada. La interpretación de dichos parámetros permite comprender cómo varía el tamaño medio del sedimento conforme aumenta el porcentaje de arena.
#==============================================================================
# 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 de la variable dependiente cuando
# ln(X)=0.
#------------------------------------------------------------------------------
intercepto <- coeficientes[1]
#------------------------------------------------------------------------------
# Pendiente del modelo (b).
#
# Indica la variación esperada del tamaño medio del grano por cada unidad de
# incremento 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 la relación entre el porcentaje de arena y el tamaño medio del grano.
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()
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 reproduce el comportamiento observado 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 reproduce adecuadamente la tendencia general del conjunto de datos. Se observa que la ecuación obtenida sigue el comportamiento de la mayor parte de las observaciones, representando satisfactoriamente la relación entre el porcentaje de arena y el tamaño medio del grano. Las diferencias existentes entre algunos puntos y la curva corresponden a la variabilidad natural del fenómeno sedimentológico.
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(
y,
y_estimado
)
#------------------------------------------------------------------------------
# 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 estimados por el modelo. Asimismo, el coeficiente de determinación (R² = 0.9592) indica que el 95.92 % de la variabilidad del tamaño medio del grano (MEAN) es explicada por el modelo logarítmico. En conjunto, estos resultados muestran un muy buen ajuste del modelo.
Todo modelo matemático posee condiciones bajo las cuales puede ser utilizado de forma adecuada. En el caso del modelo logarítmico obtenido, las restricciones provienen tanto de la naturaleza de la función logarítmica como del intervalo de observaciones empleado para ajustar el modelo. Por ello, es necesario establecer el dominio de aplicación antes de realizar estimaciones.
#==============================================================================
# 9. RESTRICCIONES DEL MODELO
#==============================================================================
#------------------------------------------------------------------------------
# Obtener el rango observado de la variable independiente.
#------------------------------------------------------------------------------
xmin <- min(x)
xmax <- max(x)
#------------------------------------------------------------------------------
# Configuración del área gráfica.
#------------------------------------------------------------------------------
plot.new()
plot.window(
xlim = c(0,100),
ylim = c(0,100)
)
#------------------------------------------------------------------------------
# Recuadro principal.
#------------------------------------------------------------------------------
rect(
5,10,
95,90,
border = "#1F4E79",
lwd = 3
)
#------------------------------------------------------------------------------
# Título.
#------------------------------------------------------------------------------
text(
50,
84,
"RESTRICCIONES DEL MODELO",
cex = 1.45,
font = 2,
col = "#1F4E79"
)
#------------------------------------------------------------------------------
# Dominio matemático.
#------------------------------------------------------------------------------
text(
50,
68,
"Dominio matemático:",
cex = 1.15,
font = 2
)
text(
50,
60,
"SAND_PCT > 0",
cex = 1.35,
font = 2,
col = "#C0392B"
)
#------------------------------------------------------------------------------
# Intervalo observado del conjunto de datos.
#------------------------------------------------------------------------------
text(
50,
44,
"Rango observado del conjunto de datos:",
cex = 1.10,
font = 2
)
text(
50,
35,
paste0(
round(xmin,2),
" ≤ SAND_PCT ≤ ",
round(xmax,2)
),
cex = 1.20,
col = "#C0392B",
font = 2
)
#------------------------------------------------------------------------------
# Nota aclaratoria.
#------------------------------------------------------------------------------
text(
50,
18,
"No se recomienda extrapolar el modelo fuera del intervalo observado.",
cex = 0.85,
col = "gray40"
)
box()
El modelo de regresión logarítmica solo puede aplicarse a
valores positivos del porcentaje de arena (SAND_PCT). Además, para
obtener estimaciones confiables, se recomienda utilizarlo únicamente
dentro del intervalo observado en el conjunto de datos, evitando
extrapolaciones fuera de dicho rango.
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 r round(y_estimacion,4) Φ. Debido a que este valor se encuentra dentro del intervalo de observaciones utilizado para ajustar el modelo, la estimación corresponde a una interpolación, por lo que puede considerarse confiable para describir el comportamiento de los sedimentos marinos analizados.
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 en los que no se disponga de mediciones directas del tamaño medio del grano.
Entre el porcentaje de arena (SAND_PCT) y el tamaño medio del grano (MEAN) de los sedimentos marinos recolectados en Estados Unidos existe una relación de tipo logarítmica, representada por el modelo MEAN (Φ) = 1.6658 + 0.7634·ln(SAND_PCT), donde x representa el porcentaje de arena (%) y y el tamaño medio del grano (Φ). El modelo presenta una relación positiva muy fuerte (r = 0.9794) y explica aproximadamente el 95.92 % de la variabilidad observada en el tamaño medio del grano (R² = 0.9592), mientras que el 4.08 % restante se atribuye a otros factores sedimentológicos no incluidos en el análisis. Asimismo, para una muestra con un 60 % de arena, el modelo estima un tamaño medio del grano de 4.7914 Φ, constituyendo una herramienta útil para realizar estimaciones granulométricas dentro del intervalo de datos analizado.