Trabajo final estadística

Presentado por:

Jose Africano, Jose Del Moral, Blas Casiano, Carlos Castañeda, Kylie Cabarcas

2025-06-04

Taller final: Modelo de regresión lineal múltiple

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.


Importamos la base de datos

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>

Creamos el modelo de regresión

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

Conclusión del modelo de regresión

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.

Análisis de los resultados usando el modelo Step

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

Conclusión del análisis de step

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.

Gráficos de los resultados

Gráfico de dispersión

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

Conclusión gráfico de dispersión

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.

Gráfico de normalidad

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

Conclusión gráfico de normalidad

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.

Conclusión general

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.