library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.2
##
## 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
# ================================
# 1. Cargar datos
# ================================
setwd("C:/Users/LENOVO/OneDrive/Escritorio/ESTADISTICA")
datos <- read.csv("china_water_pollution_data.csv")
nitratos <- datos$Nitrate_mg_L
calidad_agua <- datos$Water_Quality_Index
datos_sel <- data.frame(nitratos, calidad_agua)
# 2.
datos_sel <- na.omit(datos_sel)
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)
}
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
)
)
)
# Calcular medianas por bin y filtrar NA
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))
# 3. Definir variables para análisis
x <- datos_resumen$NO3_mediana
y <- datos_resumen$Cal_mediana
# 4. Mostrar Tabla de resumen
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
# 5. Conjetura
#Se observa una tendencia aproximadamente lineal entre los nitratos y el índice de calidad de agua, por lo que se justifica el uso de una regresión lineal simple.
plot(
x, y,
pch = 19, # puntos sólidos
col = "purple",
xlab = "Nitratos (mg/L)",
ylab = "Índice de Calidad de Agua",
main = "Relación Nitratos vs Calidad de Agua (6 puntos por bin)"
)

# Regresio lineal
regresion_lineal <- lm(y~x)
regresion_lineal
##
## Call:
## lm(formula = y ~ x)
##
## Coefficients:
## (Intercept) x
## 49.137 0.812
# 6. Cálculo de parámetros
# Cálculo de parámetros
a <- regresion_lineal$coefficients[2] # pendiente
b <- regresion_lineal$coefficients[1] # intercepto
# Crear gráfico vacío
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
# Mostrar ecuación
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
)

plot(
x, y,
col = "deepskyblue",
main = "Diagrama de dispersión con la línea de regresión",
xlab = "Nitratos (mg/L)",
ylab = "Índice de Calidad del Agua",
pch = 16
)
abline(regresion_lineal, col = "red", lwd = 2)

# 7. Test
#Test de correlación de Pearson
r <- cor(x, y, method = "pearson", use = "complete.obs")
cat("Correlación de Pearson:", round(r, 4), "\n")
## Correlación de Pearson: 0.9189
# Coeficiente de determinación
r2 <- r^2 * 100
cat("Coeficiente de determinación:", round(r2, 2), "%\n")
## Coeficiente de determinación: 84.44 %
# 8. RESTRICCIONES DEL MODELO LINEAL
# Los nitratos (x) no pueden tomar valores negativos
# x ≥ 0
# El índice de calidad del agua (y) no puede ser negativo
# y ≥ 0
# El modelo es válido únicamente dentro del rango observado de los datos
# 0.86 ≤ x ≤ 3.10 (mg/L de nitratos)
# Corte con el eje X (y = 0)
# 0 = 0.81*x + 49.14
# x ≈ -60.51 mg/L
# Este valor no tiene significado físico ni ambiental,
# por lo que el modelo no debe extrapolarse fuera del rango observado.
# 9. ESTIMACIÓN
# ¿Qué valor del Índice de Calidad del Agua se espera
# cuando la concentración de nitratos es de 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(
"¿Qué valor del Índice de Calidad del Agua\n",
"se espera cuando la concentración de\n",
"nitratos es de 2 mg/L?\n\n",
"R = ", round(estimacion_NO3_2, 2)
),
cex = 1.6,
col = "blue",
font = 2
)

# 10. CONCLUSIONES
# En el intervalo analizado entre la concentración de nitratos (mg/L) y el Índice de
# Calidad del Agua en China, se observa una relación de tipo lineal, representada por la ecuación:
# y = 0.81x + 49.14
# donde x corresponde a la concentración de nitratos (mg/L) y y al Índice de Calidad
# del Agua. El modelo es válido únicamente dentro del rango observado de los datos
# (0.86 ≤ x ≤ 3.10 mg/L).
# No existen restricciones adicionales dentro de este intervalo, salvo la condición
# de no negatividad de las variables y la no extrapolación del modelo fuera del rango
# analizado.
# Además, el Índice de Calidad del Agua está influenciado en un 84.44 % por la
# concentración de nitratos, mientras que el 15.56 % restante se debe a otros
# factores físicos, químicos y biológicos no considerados en el presente análisis.