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
datos <- read.csv("china_water_pollution_data.csv", header = TRUE, sep = ",", dec = ".")
# Selección de variables
nitratos <- datos$Nitrate_mg_L
calidad_agua <- datos$Water_Quality_Index
datos_sel <- data.frame(nitratos, calidad_agua)
plot(
nitratos,
calidad_agua,
main = "Relación entre Nitratos y la calidad del Agua",
xlab = "Nitratos (mg/L)",
ylab = "Índice de Calidad del Agua",
pch = 19,
col = "lightblue"
)
Esta gráfica muestra todas las observaciones, incluyendo valores
atípicos y NA.Se observa dispersión y posibles puntos extremos que
podrían distorsionar la regresión.
Se eliminan valores faltantes y atípicos para evitar que distorsionen la estimación de la regresión. La limpieza mejora la representación de la tendencia general, manteniendo la variabilidad natural.
# Eliminar NA
datos_sel <- na.omit(datos_sel)
# Función para detectar y eliminar valores atípicos (IQR)
quitar_atipicos_IQR <- function(x) {
Q1 <- quantile(x, 0.25, na.rm = TRUE)
Q3 <- quantile(x, 0.75, na.rm = TRUE)
IQR <- Q3 - Q1
x >= (Q1 - 1.5 * IQR) & x <= (Q3 + 1.5 * IQR)
}
# Aplicar a ambas variables
datos_limpios <- datos_sel[
quitar_atipicos_IQR(datos_sel$nitratos) &
quitar_atipicos_IQR(datos_sel$calidad_agua),
]
num_bins <- 4
datos_binned <- datos_limpios %>%
mutate(
NO3_BIN = cut(
nitratos,
breaks = seq(
floor(min(nitratos, na.rm = TRUE)),
ceiling(max(nitratos, na.rm = TRUE)),
length.out = num_bins + 1
)
)
)
datos_resumen <- datos_binned %>%
group_by(NO3_BIN) %>%
summarise(
NO3_mediana = median(nitratos, na.rm = TRUE),
Cal_mediana = median(calidad_agua, na.rm = TRUE),
n = n()
) %>%
filter(!is.na(NO3_mediana) & !is.na(Cal_mediana))
datos_resumen
## # A tibble: 4 × 4
## NO3_BIN NO3_mediana Cal_mediana n
## <fct> <dbl> <dbl> <int>
## 1 (0,1] 0.865 49.9 54
## 2 (1,2] 1.66 50.7 1490
## 3 (2,3] 2.32 50.5 1377
## 4 (3,4] 3.1 51.9 57
x <- datos_resumen$NO3_mediana
y <- datos_resumen$Cal_mediana
plot(
x, y,
pch = 19,
cex = 1.2,
col = "darkgreen",
xlab = "Concentración de nitratos (mg/L)",
ylab = "Índice de Calidad del Agua",
main = "Gráfica Nº 3. Relación entre nitratos y el Índice de Calidad del Agua",
font.main = 2
)
# Modelo de regresión lineal simple
regresion_lineal <- lm(y ~ x)
regresion_lineal
##
## Call:
## lm(formula = y ~ x)
##
## Coefficients:
## (Intercept) x
## 49.137 0.812
a <- coef(regresion_lineal)[2] # pendiente
b <- coef(regresion_lineal)[1] # intercepto
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
text(
x = 1, y = 1,
labels = paste0(
"Ecuación lineal\n",
"y = ax + b\n",
"y = ", round(a, 2), "x + ", round(b, 2)
),
cex = 2,
col = "blue",
font = 2
)
### 7.2 Gráfico con recta de regresión
plot(
x, y,
col = "deepskyblue",
pch = 16,
main = "Gráfica N.º 4: Diagrama de dispersión entre Nitratos y\n el Índice de Calidad del Agua",
xlab = "Nitratos (mg/L)",
ylab = "Índice de Calidad del Agua"
)
abline(regresion_lineal, col = "red", lwd = 2)
## 8. Correlación y coeficiente de determinación
r <- cor(x, y, method = "pearson", use = "complete.obs")
r2 <- r^2 * 100
cat("Correlación de Pearson:", round(r, 4), "\n")
## Correlación de Pearson: 0.9189
cat("Coeficiente de determinación:", round(r2, 2), "%\n")
## Coeficiente de determinación: 84.44 %
# Restricciones generales para todo el dominio:
# 1. Concentración de nitratos: x ≥ 0
# 2. Índice de Calidad del Agua: y ≥ 0
# 3. El modelo lineal puede aplicarse para cualquier x ≥ 0,
# aunque los resultados más confiables se obtienen dentro del rango observado (0.865 ≤ x ≤ 3.10 mg/L)
#Fuera de este rango, el modelo extrapola y puede no reflejar la realidad física o química del agua.
# Estimación del índice de calidad del agua para nitratos = 2 mg/L
estimacion_NO3_2 <- a * 2 + b
estimacion_NO3_2
## x
## 50.76117
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
text(
x = 1, y = 1,
labels = paste0(
"Estimación del Índice de Calidad del Agua\n",
"para nitratos = 2 mg/L\n\n",
"Resultado = ", round(estimacion_NO3_2, 2)
),
cex = 1.6,
col = "blue",
font = 2
)
En la contaminación del agua en China se observa una relación lineal positiva entre la concentración de nitratos y el Índice de Calidad del Agua. El modelo se describe mediante la ecuación:y = 0.81x + 49.14 El modelo explica aproximadamente 84.44 % de la variabilidad del índice de calidad del agua, lo que indica una fuerte asociación entre ambas variables.El porcentaje restante de la variabilidad puede atribuirse a otros factores físicos, químicos y biológicos que no fueron considerados, como la temperatura del agua, oxígeno disuelto o presencia de otros contaminantes.Las restricciones se aplican para todo el dominio natural de la variable: x ≥ 0, y ≥ 0, siendo más confiables dentro del rango observado de los datos. ```