Jose Africano, Jose Del Moral, Blas Casiano, Carlos Castañeda, Kylie Cabarcas
2025-06-04
Este trabajo tiene como objetivo construir un modelo de regresión lineal múltiple que permita predecir la turbiedad del agua en muestras recolectadas en el departamento del Atlántico, a partir de diversas variables microbiológicas. Para ello, se utilizaron datos simulados con alta correlación entre variables como el pH, temperatura, sólidos totales, conductividad, color real, coliformes totales, Escherichia coli (E. coli) y oxígeno disuelto.
Para este trabajo, se utilizó una base de datos de la calidad del agua en el departamento del Atlántico, enfocada en parámetros de contaminación.
knitr::opts_chunk$set(echo = TRUE)
library(readxl)
datos_agua <- read_excel("contaminacion_agua_atlantico.xlsx",
col_types = c("text", "text", "text",
"text", "numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric"))
head(datos_agua)
## # A tibble: 6 × 13
## nuqfus fecha_de_la_medicion nombre_del_laboratorio departamento ph
## <chr> <chr> <chr> <chr> <dbl>
## 1 NF-1000 2024-12-27 AguaPura Atlántico 7.10
## 2 NF-1001 2024-12-06 EcoLab Atlántico 6.97
## 3 NF-1002 2025-05-09 LabAguas Atlántico 7.13
## 4 NF-1003 2024-10-18 LabAguas Atlántico 7.30
## 5 NF-1004 2025-01-06 HidroAnálisis Atlántico 6.95
## 6 NF-1005 2024-07-03 EcoLab Atlántico 6.95
## # ℹ 8 more variables: temperatura <dbl>, solidos_totales <dbl>,
## # conductividad <dbl>, turbiedad <dbl>, color_real <dbl>,
## # coliformes_totales <dbl>, e_coli <dbl>, oxigeno_disuelto <dbl>
Para el desarrollo de este trabajo, tomamos como variable dependiente la turbiedad del agua y como variables independientes los valores de temperatura, sólidos totales, conductividad, color real, coliformes totales y E. coli.
library(dplyr)
library(corrplot)
# Filtrar solo variables numéricas
d_int <- datos_agua %>% select_if(is.numeric)
# Calcular matriz de correlación
matriz_correlacion <- cor(d_int, use = "complete.obs")
# Graficar la correlación
corrplot(matriz_correlacion, method = "circle", type = "full",
col = colorRampPalette(c("blue", "red", "skyblue"))(100),
tl.col = "black", tl.cex = 0.6,
addCoef.col = "black",
number.cex = 0.4)
# Crear modelo de regresión lineal múltiple
modelo_turbiedad <- lm(turbiedad ~ temperatura + solidos_totales +
conductividad + color_real + coliformes_totales +
e_coli, data = d_int)
# Mostrar resumen del modelo
summary(modelo_turbiedad)
##
## Call:
## lm(formula = turbiedad ~ temperatura + solidos_totales + conductividad +
## color_real + coliformes_totales + e_coli, data = d_int)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.35991 -0.36322 0.00393 0.32090 1.28868
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.828967 2.234690 -0.818 0.415
## temperatura -0.049585 0.117484 -0.422 0.674
## solidos_totales 0.001781 0.008834 0.202 0.841
## conductividad 0.026692 0.015183 1.758 0.082 .
## color_real 0.459294 0.064392 7.133 2.1e-10 ***
## coliformes_totales 0.011625 0.010311 1.127 0.262
## e_coli -0.007046 0.011703 -0.602 0.549
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5585 on 93 degrees of freedom
## Multiple R-squared: 0.9381, Adjusted R-squared: 0.9341
## F-statistic: 234.9 on 6 and 93 DF, p-value: < 2.2e-16
Se obtuvo un modelo altamente explicativo, con un coeficiente de determinación R² de 0.9381 y un R² ajustado de 0.9341. Esto indica que aproximadamente el 93% de la variabilidad en la turbiedad puede explicarse mediante las variables incluidas en el modelo.
En general, se concluye que el modelo es adecuado para estimar la turbiedad del agua, destacando color_real como el principal factor explicativo.
d_int=step(modelo_turbiedad, direction="both", trace=2)
## Start: AIC=-109.77
## turbiedad ~ temperatura + solidos_totales + conductividad + color_real +
## coliformes_totales + e_coli
##
## Df Sum of Sq RSS AIC
## - solidos_totales 1 0.0127 29.019 -111.724
## - temperatura 1 0.0556 29.061 -111.576
## - e_coli 1 0.1130 29.119 -111.378
## - coliformes_totales 1 0.3964 29.402 -110.410
## <none> 29.006 -109.767
## - conductividad 1 0.9640 29.970 -108.498
## - color_real 1 15.8681 44.874 -68.131
##
## Step: AIC=-111.72
## turbiedad ~ temperatura + conductividad + color_real + coliformes_totales +
## e_coli
##
## Df Sum of Sq RSS AIC
## - temperatura 1 0.0464 29.065 -113.564
## - e_coli 1 0.1079 29.126 -113.352
## - coliformes_totales 1 0.3850 29.404 -112.405
## <none> 29.019 -111.724
## + solidos_totales 1 0.0127 29.006 -109.767
## - conductividad 1 2.9201 31.939 -104.135
## - color_real 1 15.8620 44.880 -70.117
##
## Step: AIC=-113.56
## turbiedad ~ conductividad + color_real + coliformes_totales +
## e_coli
##
## Df Sum of Sq RSS AIC
## - e_coli 1 0.1134 29.178 -115.174
## - coliformes_totales 1 0.3816 29.447 -114.259
## <none> 29.065 -113.564
## + temperatura 1 0.0464 29.019 -111.724
## + solidos_totales 1 0.0036 29.061 -111.576
## - conductividad 1 7.7142 36.779 -92.024
## - color_real 1 16.2904 45.355 -71.064
##
## Step: AIC=-115.17
## turbiedad ~ conductividad + color_real + coliformes_totales
##
## Df Sum of Sq RSS AIC
## - coliformes_totales 1 0.4079 29.586 -115.786
## <none> 29.178 -115.174
## + e_coli 1 0.1134 29.065 -113.564
## + temperatura 1 0.0520 29.126 -113.352
## + solidos_totales 1 0.0076 29.171 -113.200
## - conductividad 1 7.9176 37.096 -93.166
## - color_real 1 16.1809 45.359 -73.055
##
## Step: AIC=-115.79
## turbiedad ~ conductividad + color_real
##
## Df Sum of Sq RSS AIC
## <none> 29.586 -115.786
## + coliformes_totales 1 0.408 29.178 -115.174
## + e_coli 1 0.140 29.447 -114.259
## + temperatura 1 0.029 29.557 -113.885
## + solidos_totales 1 0.010 29.576 -113.821
## - conductividad 1 7.798 37.384 -94.392
## - color_real 1 82.022 111.608 14.982
La turbiedad del agua puede explicarse de forma precisa y eficiente principalmente con las variables color_real y conductividad. Esto permite simplificar el modelo sin comprometer su rendimiento, lo cual es útil para el monitoreo y control de la calidad del agua.
plot(modelo_turbiedad$fitted.values, d_int$PUNT_GLOBAL,
main = "Gráfico de Dispersión: Turbiedad Observada vs. Predicciones de la turbiedad",
xlab = "Turbiedad Predicha",
ylab = "Turbiedad Observada",
col = "orange", pch = 19)
abline(0, 1, col = "purple", lwd = 2) # Línea de igualdad
# agregamos una leyenda afuera del gráfico
legend("topleft", legend = "Línea de igualdad", col = "purple", lwd = 2)
legend("bottomright", legend = "Puntos", col = "orange", pch = 19)
# agregamos un fondo de cuadricula para facilitar la lectura del gráfico
grid(col = "skyblue", lty = "dotted")
El gráfico de dispersión muestra que las predicciones del modelo son razonablemente cercanas a los valores reales. Aunque no todos los puntos siguen la línea de igualdad, el modelo es útil para estimaciones generales de turbiedad.
qqnorm(resid(modelo_turbiedad),
main = "QQ-Plot: Residuos del Modelo",
#agreamos las etiquetas para x y y
xlab = "Predicciones de la turbiedad",
ylab = "Turbiedad Observadao",
col = "purple", pch = 19)
qqline(resid(modelo_turbiedad), col = "orange", lwd = 2)
legend("topleft", legend = "Línea diagonal", col = "orange", lwd = 2)
legend("bottomright", legend = "Residuos", col = "purple", pch = 19)
# cuadricula de fondo
grid(col = "skyblue", lty = "dotted")
El gráfico QQ indica que los residuos se aproximan a una distribución normal, especialmente en el centro. No hay desviaciones graves, lo que respalda la validez estadística del modelo ajustado.
En este trabajo se construyó un modelo de regresión lineal múltiple para predecir la turbiedad del agua usando variables como conductividad y color real. El modelo final mostró un excelente ajuste (R² ajustado = 0.93) y cumplió los supuestos necesarios. Los resultados confirman que este modelo puede ser útil como herramienta para el análisis y la toma de decisiones en temas de calidad del agua.