#===============================================================================
# 1. LIBRERÍAS
#===============================================================================
#Esta sección carga las librerías necesarias para desarrollar el análisis estadístico.
#Cada una cumple una función específica:
#dplyr: permite filtrar, seleccionar y transformar los datos del conjunto de sedimentos marinos.
#gt: se utiliza para generar tablas con un formato profesional para el informe.
#knitr: integra correctamente las tablas y resultados dentro del documento RMarkdown.
# Manipulación de datos
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Creación de tablas profesionales
library(gt)
# Integración de tablas en RMarkdown
library(knitr)
En esta etapa se carga el conjunto de datos que contiene la información de los sedimentos marinos utilizada para desarrollar el modelo de regresión. 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.
# Se especifica que la primera fila contiene los nombres de las variables,
# el separador corresponde a una coma y los datos se importan sin convertir
# automáticamente los textos en factores.
datos <- read.csv(
"C:/Users/Grace/Downloads/dataset_geologico_limpio_80.4.csv",
header = TRUE,
sep = ",",
dec = ".",
stringsAsFactors = FALSE
)
#------------------------------------------------------------------------------
# Resumen general del conjunto de datos.
#
# Se calcula el número de observaciones (filas) y el número de variables
# (columnas) con el fin de verificar que la base fue cargada correctamente.
#------------------------------------------------------------------------------
resumen_bd <- data.frame(
Descripción = c(
"Número de observaciones",
"Número de variables"
),
Valor = c(
nrow(datos),
ncol(datos)
)
)
#------------------------------------------------------------------------------
# Presentación de la tabla resumen.
#------------------------------------------------------------------------------
resumen_bd %>%
gt() %>%
tab_header(
title = md("**Tabla N.°1. Resumen del conjunto de datos**")
) %>%
cols_align(
align = "center"
) %>%
tab_options(
table.width = pct(60),
column_labels.font.weight = "bold"
)
| Tabla N.°1. Resumen del conjunto de datos | |
| Descripción | Valor |
|---|---|
| Número de observaciones | 27784 |
| Número de variables | 58 |
Para el desarrollo del modelo de regresión lineal se seleccionaron dos variables cuantitativas del conjunto de datos de sedimentos marinos. La variable independiente (X) corresponde al porcentaje de grava (GRAVEL_PCT), mientras que la variable dependiente (Y) corresponde al tamaño medio del grano (MEAN). Esta selección se fundamenta en que la composición granulométrica del sedimento influye sobre el tamaño medio de las partículas. En particular, un mayor porcentaje de grava suele asociarse con sedimentos de mayor tamaño, lo que permite plantear una relación de causa–efecto adecuada para el ajuste de un modelo de regresión lineal simple.
#===============================================================================
# 3. SELECCIÓN DE VARIABLES
#===============================================================================
#------------------------------------------------------------------------------
# Definición de las variables del modelo.
#
# X : Variable independiente (causa)
# Y : Variable dependiente (efecto)
#
# Ambas variables se convierten al tipo numérico para garantizar que puedan
# utilizarse posteriormente en el ajuste del modelo de regresión.
#------------------------------------------------------------------------------
x_original <- as.numeric(datos$GRAVEL_PCT)
y_original <- as.numeric(datos$MEAN)
#------------------------------------------------------------------------------
# Tabla descriptiva de las variables seleccionadas.
#------------------------------------------------------------------------------
tabla_variables <- data.frame(
Rol = c(
"Variable independiente (X)",
"Variable dependiente (Y)"
),
Variable = c(
"GRAVEL_PCT",
"MEAN"
),
Descripción = c(
"Porcentaje de grava (%)",
"Tamaño medio del grano (Φ)"
)
)
#------------------------------------------------------------------------------
# Presentación de la tabla de variables.
#------------------------------------------------------------------------------
tabla_variables %>%
gt() %>%
tab_header(
title = md("**Tabla N.°2. Variables seleccionadas para
el modelo de regresión lineal**")
) %>%
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 lineal | ||
| Rol | Variable | Descripción |
|---|---|---|
| Variable independiente (X) | GRAVEL_PCT | Porcentaje de grava (%) |
| Variable dependiente (Y) | MEAN | Tamaño medio del grano (Φ) |
La tabla de pares de valores se construye a partir de las variables seleccionadas para el modelo de regresión lineal. Su propósito es organizar la información en pares ordenados (X,Y), donde cada observación representa simultáneamente el porcentaje de grava (GRAVEL_PCT) y el tamaño medio del grano (MEAN). 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, únicamente se presentan las primeras observaciones junto con el tamaño muestral total.
#===============================================================================
# 4. TABLA DE PARES DE VALORES
#===============================================================================
#------------------------------------------------------------------------------
# Construcción de la tabla de pares ordenados (X,Y).
#
# Cada fila representa una observación del conjunto de datos y contiene el
# valor de la variable independiente (X) y de la variable dependiente (Y).
#------------------------------------------------------------------------------
TPV <- data.frame(
x = x_original,
y = y_original
)
#------------------------------------------------------------------------------
# Cálculo del tamaño muestral.
#------------------------------------------------------------------------------
n_muestral <- nrow(TPV)
cat("Tamaño muestral:", n_muestral)
## Tamaño muestral: 27784
#------------------------------------------------------------------------------
# Se agrega un número consecutivo únicamente para facilitar la lectura de la
# tabla. Debido al tamaño de la base de datos solo se muestran las primeras
# observaciones.
#------------------------------------------------------------------------------
TPV_tabla_inicial <- TPV %>%
mutate(Nro = row_number()) %>%
select(Nro, x, y)
#------------------------------------------------------------------------------
# Presentación de las primeras observaciones.
#------------------------------------------------------------------------------
head(TPV_tabla_inicial, 20) %>%
gt() %>%
cols_label(
Nro = "N°",
x = "GRAVEL_PCT (%)",
y = "MEAN (Φ)"
) %>%
tab_header(
title = md("**Tabla N.°3. Primeras filas de
la tabla de pares de valores**")
) %>%
fmt_number(
columns = c(x, y),
decimals = 4
) %>%
cols_align(
align = "center"
) %>%
tab_options(
table.width = pct(90),
column_labels.font.weight = "bold"
)
| Tabla N.°3. Primeras filas de la tabla de pares de valores | ||
| N° | GRAVEL_PCT (%) | MEAN (Φ) |
|---|---|---|
| 1 | 46.0000 | 4.2957 |
| 2 | 6.0000 | 1.0940 |
| 3 | 0.0000 | 0.9126 |
| 4 | 0.0000 | 0.9411 |
| 5 | 16.0000 | 1.7073 |
| 6 | 4.0000 | 0.9047 |
| 7 | 23.0000 | 2.5442 |
| 8 | 65.0000 | 5.6276 |
| 9 | 14.8798 | 1.9135 |
| 10 | 4.0000 | 0.9720 |
| 11 | 25.0000 | 2.8069 |
| 12 | 5.0126 | 1.2926 |
| 13 | 28.0000 | 2.9099 |
| 14 | 9.0000 | 1.6441 |
| 15 | 0.0000 | 0.8701 |
| 16 | 0.0000 | 0.6711 |
| 17 | 0.0000 | 0.8553 |
| 18 | 0.0000 | 0.6562 |
| 19 | 0.0000 | 0.9318 |
| 20 | 0.0000 | 0.7925 |
El diagrama de dispersión constituye la primera herramienta de análisis del modelo de regresión lineal, 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 presencia de valores atípicos o agrupamientos que puedan afectar el ajuste del modelo. Esta representación gráfica sirve como base para formular la conjetura del modelo y decidir si es necesario realizar algún tratamiento previo sobre los datos.
#===============================================================================
# 5. GRÁFICA DE DISPERSIÓN INICIAL
#===============================================================================
#------------------------------------------------------------------------------
# Preparación de los datos para la representación gráfica.
#
# En esta etapa únicamente se eliminan registros que no pueden representarse
# en un plano cartesiano (valores faltantes o no finitos). Esto no constituye
# un tratamiento estadístico de la información.
#------------------------------------------------------------------------------
TPV_grafica_inicial <- TPV %>%
filter(
!is.na(x),
!is.na(y),
is.finite(x),
is.finite(y)
)
#------------------------------------------------------------------------------
# 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.
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Construcción del diagrama de dispersión.
#------------------------------------------------------------------------------
plot(
TPV_grafica_inicial$x,
TPV_grafica_inicial$y,
pch = 16,
cex = 0.35,
col = rgb(0, 0, 1, 0.15),
main = "Gráfica N.°1. Diagrama de dispersión entre GRAVEL_PCT y MEAN",
xlab = "GRAVEL_PCT (Porcentaje de grava, %)",
ylab = "MEAN (Tamaño medio del grano, Φ)"
)
grid()
box()
A partir del diagrama de dispersión se formula una primera conjetura sobre la relación entre las variables. La nube de puntos presenta una tendencia creciente y aproximadamente lineal, sin evidenciar un comportamiento caótico ni valores atípicos que justifiquen un tratamiento previo. Por ello, se propone que la relación entre GRAVEL_PCT y MEAN puede representarse mediante un modelo de regresión lineal simple.
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
tendencia creciente, ordenada y aproximadamente lineal. Esto indica que,
a medida que aumenta el porcentaje de grava (GRAVEL_PCT),
también tiende a aumentar el tamaño medio del grano (MEAN).
La distribución no presenta un comportamiento caótico, una dispersión
excesiva ni una forma irregular que obligue a segmentar los datos o
transformar las variables 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, no se agrupan observaciones repetidas por promedios, no se segmentan los datos por partes y no se transforman las variables. 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.
En consecuencia, se conserva la nube original y se continúa directamente con el cálculo de parámetros del modelo de regresión lineal. Debido a que no se realiza tratamiento de datos, tampoco es necesario construir una nueva gráfica de dispersión ni formular una nueva conjetura.
\[ Y=a+bX \]
Donde:
Una vez planteada la conjetura del modelo, se procede a estimar sus parámetros mediante el método de mínimos cuadrados ordinarios. Previamente, se realiza una validación técnica para garantizar que el modelo se ajuste únicamente con observaciones numéricas válidas.
#===============================================================================
# 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. Esta validación no corresponde a un tratamiento
# estadístico, ya que únicamente elimina registros con valores faltantes,
# infinitos o porcentajes fuera del rango físico posible.
#------------------------------------------------------------------------------
TPV_modelo <- TPV %>%
filter(
!is.na(x),
!is.na(y),
is.finite(x),
is.finite(y),
x >= 0,
x <= 100
)
#------------------------------------------------------------------------------
# Definición de las variables que se utilizarán en el modelo.
#------------------------------------------------------------------------------
x <- TPV_modelo$x
y <- TPV_modelo$y
#------------------------------------------------------------------------------
# Ajuste del modelo de regresión lineal mediante el método de mínimos cuadrados.
#------------------------------------------------------------------------------
modelo_lineal <- lm(y ~ x)
#------------------------------------------------------------------------------
# Obtención de los coeficientes del modelo.
#------------------------------------------------------------------------------
coeficientes <- coef(modelo_lineal)
intercepto <- coeficientes[1]
pendiente <- coeficientes[2]
#------------------------------------------------------------------------------
# Tabla de parámetros estimados.
#------------------------------------------------------------------------------
tabla_parametros <- data.frame(
Parámetro = c(
"Intercepto (a)",
"Pendiente (b)"
),
Valor = c(
intercepto,
pendiente
)
)
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 lineal**")
) %>%
tab_options(
table.width = pct(80),
column_labels.font.weight = "bold"
)
| Tabla N.°5. Parámetros estimados del modelo de regresión lineal | |
| Parámetro | Valor |
|---|---|
| Intercepto (a) | 0.8022 |
| Pendiente (b) | 0.0749 |
#===============================================================================
# ECUACIÓN DEL MODELO LINEAL
#===============================================================================
ecuacion <- paste0(
"MEAN (Φ) = ",
round(intercepto, 4),
ifelse(pendiente >= 0, " + ", " - "),
round(abs(pendiente), 4),
" · GRAVEL_PCT"
)
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,
"MEAN (Φ) = a + b · GRAVEL_PCT",
font=2,
cex=1.28,
col="#C0392B"
)
rect(
5,8,
95,48,
border="#1F4E79",
lwd=3
)
text(
50,
43,
"MODELO LINEAL AJUSTADO",
font=2,
cex=1.45,
col="#1F4E79"
)
text(
50,
24,
ecuacion,
font=2,
cex=1.18,
col="#C0392B"
)
text(
50,
3,
"Ecuación obtenida mediante el método de mínimos cuadrados ordinarios.",
cex=0.85,
col="gray40"
)
box()
Una vez obtenido el modelo de regresión lineal, se compara la recta ajustada con las observaciones reales para evaluar visualmente la capacidad del modelo para representar el comportamiento de los datos. La superposición permite observar si la recta estimada sigue la tendencia general de la nube de puntos; posteriormente, esta apreciación visual se complementa con el coeficiente de correlación de Pearson y el coeficiente de determinación.
#===============================================================================
# 8. REALIDAD Y MODELO
#===============================================================================
#------------------------------------------------------------------------------
# Generación de puntos sobre la recta del modelo.
#
# Se construye una secuencia de valores de la variable independiente para
# representar de forma continua la recta de regresión.
#------------------------------------------------------------------------------
x_modelo <- seq(
from = min(x),
to = max(x),
length.out = 300
)
#------------------------------------------------------------------------------
# Cálculo de los valores estimados por el modelo.
#------------------------------------------------------------------------------
y_modelo <- predict(
modelo_lineal,
newdata = data.frame(
x = x_modelo
)
)
#------------------------------------------------------------------------------
# Representación de las observaciones reales.
#------------------------------------------------------------------------------
plot(
x,
y,
pch = 16,
cex = 0.35,
col = rgb(0,0,1,0.15),
main = "Gráfica N.°2. Superposición del modelo lineal\ncon las observaciones reales",
xlab = "GRAVEL_PCT (Porcentaje de grava, %)",
ylab = "MEAN (Tamaño medio del grano, Φ)"
)
#------------------------------------------------------------------------------
# Superposición de la recta ajustada.
#------------------------------------------------------------------------------
lines(
x_modelo,
y_modelo,
col = "red3",
lwd = 3
)
grid()
box()
#------------------------------------------------------------------------------
# Leyenda de la gráfica.
#------------------------------------------------------------------------------
legend(
"bottomright",
legend = c(
"Observaciones reales",
"Modelo lineal"
),
pch = c(
16,
NA
),
lty = c(
NA,
1
),
lwd = c(
NA,
3
),
col = c(
rgb(0,0,1,0.15),
"red3"
),
bty = "n"
)
Una vez ajustado el modelo de regresión lineal, se evalúa su calidad mediante el coeficiente de correlación de Pearson (r) y el coeficiente de determinación (R²). Estos indicadores permiten medir la intensidad de la relación lineal entre las variables y la proporción de la variabilidad de la variable dependiente que es explicada por el modelo.
#===============================================================================
# 9. TEST
#===============================================================================
#------------------------------------------------------------------------------
# Cálculo del coeficiente de correlación de Pearson.
#
# Este indicador mide la intensidad y dirección de la relación lineal entre
# la variable independiente y la variable dependiente.
#------------------------------------------------------------------------------
r <- cor(x, y)
#------------------------------------------------------------------------------
# Cálculo del coeficiente de determinación.
#
# Este indicador representa la proporción de la variabilidad de la variable
# dependiente que es explicada por el modelo de regresión.
#------------------------------------------------------------------------------
R2 <- summary(modelo_lineal)$r.squared
#------------------------------------------------------------------------------
# Tabla de indicadores del modelo.
#------------------------------------------------------------------------------
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.°6. Indicadores estadísticos para
evaluar la calidad del ajuste**")
) %>%
tab_options(
table.width = pct(85),
column_labels.font.weight = "bold"
)
| Tabla N.°6. Indicadores estadísticos para evaluar la calidad del ajuste | |
| Indicador estadístico | Valor |
|---|---|
| Coeficiente de correlación de Pearson (r) | 0.9893 |
| Coeficiente de determinación (R²) | 0.9787 |
Interpretación: El coeficiente de correlación de
Pearson obtenido fue r = 0.9893, lo que indica una
relación lineal positiva muy fuerte entre el porcentaje de grava
(GRAVEL_PCT) y el tamaño medio del grano
(MEAN). Asimismo, el coeficiente de determinación fue
R² = 0.9787, indicando que el 97.87 %
de la variabilidad observada en MEAN es explicada por el
modelo de regresión lineal, mientras que el 2.13 %
restante se atribuye a otros factores no considerados en el
modelo.**
Las predicciones obtenidas mediante el modelo de regresión
lineal son válidas únicamente dentro del intervalo observado para la
variable GRAVEL_PCT, mostrado en el recuadro de esta
sección. En consecuencia, no se recomienda utilizar la ecuación para
realizar estimaciones fuera de este rango, ya que ello implicaría
extrapolar el modelo y podría generar resultados poco
confiables.
#===============================================================================
# 10. RESTRICCIONES
#===============================================================================
#------------------------------------------------------------------------------
# Determinación del intervalo de valores observado para la variable
# independiente. Este intervalo define el dominio de aplicación del modelo.
#------------------------------------------------------------------------------
xmin <- min(x)
xmax <- max(x)
#------------------------------------------------------------------------------
# Presentación gráfica de las restricciones del modelo.
#------------------------------------------------------------------------------
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,
60,
"Rango observado del conjunto de datos:",
cex=1.15,
font=2
)
text(
50,
48,
paste0(
round(xmin,2),
" <= GRAVEL_PCT <= ",
round(xmax,2)
),
cex=1.25,
font=2,
col="#C0392B"
)
text(
50,
24,
"No se recomienda extrapolar el modelo",
cex=0.95,
col="gray40"
)
text(
50,
18,
"fuera del intervalo observado.",
cex=0.95,
col="gray40"
)
box()
Una vez obtenido el modelo de regresión lineal, se utiliza la ecuación ajustada para estimar el valor de la variable dependiente (MEAN) correspondiente a un valor específico de la variable independiente (GRAVEL_PCT). Esta estimación debe realizarse únicamente dentro del intervalo de validez establecido para el modelo.
#===============================================================================
# 11. ESTIMACIÓN
#===============================================================================
#------------------------------------------------------------------------------
# Valor de la variable independiente para el cual se realizará la estimación.
#------------------------------------------------------------------------------
x_estimacion <- 35
#------------------------------------------------------------------------------
# Estimación de la variable dependiente utilizando la ecuación del modelo.
#------------------------------------------------------------------------------
y_estimacion <- predict(
modelo_lineal,
newdata = data.frame(
x = x_estimacion
)
)
#------------------------------------------------------------------------------
# Presentación de la estimación mediante un recuadro informativo.
#------------------------------------------------------------------------------
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 LINEAL",
cex=1.35,
font=2,
col="#1F4E79"
)
text(
50,
63,
paste(
"Para una muestra con un porcentaje",
"de grava (GRAVEL_PCT) igual a"
),
cex=0.95
)
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
)
text(
50,
30,
paste0(
round(y_estimacion,4),
" Φ"
),
cex=2,
font=2,
col="#C0392B"
)
text(
50,
18,
"Estimación obtenida mediante el modelo de regresión lineal ajustado.",
cex=0.83,
col="gray40"
)
box()
Interpretación: Para una muestra de sedimento marino
con un porcentaje de grava (GRAVEL_PCT) de 35
%, el modelo de regresión lineal estima un tamaño medio del
grano (MEAN) de 3.4246 Φ. Esta estimación
fue obtenida mediante la ecuación ajustada del modelo y es válida
siempre que el valor de la variable independiente se encuentre dentro
del intervalo de aplicación establecido.**
El análisis realizado permitió establecer que existe una
relación lineal positiva entre el porcentaje de grava
(GRAVEL_PCT) y el tamaño medio del grano
(MEAN). A partir del diagrama de dispersión se formuló la
conjetura de un modelo de regresión lineal simple, sin que fuera
necesario aplicar tratamientos sobre los datos, debido a que la nube de
puntos presentó una tendencia creciente y aproximadamente lineal.
Mediante el método de mínimos cuadrados se obtuvo el modelo \(MEAN = 0.8022 + 0.0749 \times
GRAVEL\_PCT\), el cual presentó un coeficiente de correlación de
Pearson de 0.9893, indicando una relación lineal muy
fuerte entre las variables, y un coeficiente de determinación de
0.9787, lo que significa que el 97.87 %** de
la variabilidad del tamaño medio del grano es explicada por el
porcentaje de grava. Finalmente, el modelo permite realizar estimaciones
confiables dentro del rango observado de los datos; por ejemplo, para
una muestra con 35 % de grava se estimó un tamaño medio
del grano de 3.4246 Φ.