# Librerías
library(kableExtra)
library(knitr)
library(magrittr)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:kableExtra':
##
## group_rows
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(e1071)
# Cargar datos
datos <- read.csv("china_water_pollution_data.csv",
header = TRUE,
sep = ",",
dec = ".")
Nitrato <- datos$Nitrate_mg_L
Nitrato <- na.omit(Nitrato)
Nitrato <- Nitrato[Nitrato >= 0]
n <- length(Nitrato)
n
## [1] 3000
minimo <- min(Nitrato)
maximo <- max(Nitrato)
R <- maximo - minimo
K <- floor(1 + 3.322 * log10(n))
A <- R / K
Li <- round(seq(from = minimo, to = maximo - A, by = A),2)
Ls <- round(seq(from = minimo + A, to = maximo, by = A),2)
Mc <- (Li + Ls)/2
ni <- numeric(K)
for (i in 1:K) {
if (i < K) {
ni[i] <- sum(Nitrato >= Li[i] & Nitrato < Ls[i])
} else {
ni[i] <- sum(Nitrato >= Li[i] & Nitrato <= Ls[i])
}
}
hi <- ni/sum(ni)*100
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)
TDF_Nitrato <- data.frame(Li, Ls, Mc, ni, round(hi,2), Ni_asc, round(Hi_asc,2))
colnames(TDF_Nitrato) <- c("Lim inf","Lim sup","MC","ni","hi(%)","Ni asc","Hi asc(%)")
kable(TDF_Nitrato, align="c",
caption="Tabla de Frecuencias del Nitrato (mg/L) según la Regla de Sturges") %>%
kable_styling(full_width = FALSE)
| Lim inf | Lim sup | MC | ni | hi(%) | Ni asc | Hi asc(%) |
|---|---|---|---|---|---|---|
| 0.23 | 0.53 | 0.380 | 5 | 0.17 | 5 | 0.17 |
| 0.53 | 0.83 | 0.680 | 22 | 0.73 | 27 | 0.90 |
| 0.83 | 1.13 | 0.980 | 101 | 3.37 | 128 | 4.27 |
| 1.13 | 1.43 | 1.280 | 280 | 9.33 | 408 | 13.60 |
| 1.43 | 1.73 | 1.580 | 518 | 17.27 | 926 | 30.87 |
| 1.73 | 2.04 | 1.885 | 700 | 23.33 | 1626 | 54.20 |
| 2.04 | 2.34 | 2.190 | 653 | 21.77 | 2279 | 75.97 |
| 2.34 | 2.64 | 2.490 | 411 | 13.70 | 2690 | 89.67 |
| 2.64 | 2.94 | 2.790 | 218 | 7.27 | 2908 | 96.93 |
| 2.94 | 3.24 | 3.090 | 70 | 2.33 | 2978 | 99.27 |
| 3.24 | 3.54 | 3.390 | 15 | 0.50 | 2993 | 99.77 |
| 3.54 | 3.84 | 3.690 | 7 | 0.23 | 3000 | 100.00 |
La tabla de distribución de frecuencias del Nitrato en (mg/L) fue construida inicialmente aplicando la Regla de Sturges para determinar el número óptimo de clases.
Posteriormente, el procedimiento se simplificó utilizando la función hist(), obteniendo automáticamente los intervalos y frecuencias, confirmando los resultados obtenidos manualmente.
Hist_Nitrato <- hist(Nitrato,
breaks = K,
plot = FALSE)
Li <- Hist_Nitrato$breaks[-length(Hist_Nitrato$breaks)]
Ls <- Hist_Nitrato$breaks[-1]
ni <- Hist_Nitrato$counts
hi <- round((ni/sum(ni))*100,2)
TDF_simplificada <- data.frame(
Lim_inf = round(Li,2),
Lim_sup = round(Ls,2),
ni = ni,
hi = hi
)
kable(TDF_simplificada,
align="c",
caption="Tabla simplificada obtenida mediante hist()")
| Lim_inf | Lim_sup | ni | hi |
|---|---|---|---|
| 0.0 | 0.5 | 4 | 0.13 |
| 0.5 | 1.0 | 58 | 1.93 |
| 1.0 | 1.5 | 464 | 15.47 |
| 1.5 | 2.0 | 1026 | 34.20 |
| 2.0 | 2.5 | 998 | 33.27 |
| 2.5 | 3.0 | 379 | 12.63 |
| 3.0 | 3.5 | 63 | 2.10 |
| 3.5 | 4.0 | 8 | 0.27 |
hist(Nitrato, breaks = 10,
main = "Gráfica N°1: Distribución del Nitrato
en el estudio de contaminación del agua
en China en el año 2023",
xlab = "Nitrato (mg/L)",
ylab = "Cantidad",
ylim = c(0, max(ni)),
col = "lightgreen")
hist(Nitrato, breaks = 10,
main = "Gráfica N°2: Distribución general del Nitrato
en el estudio de contaminación del agua en China 2023",
xlab = "Nitrato (mg/L)",
ylab = "Cantidad",
ylim = c(0, max(ni)),
col = "lightgreen")
barplot(
height = TDF_Nitrato$`hi(%)`,
space = 0,
col = "skyblue",
main = "Gráfica N°3: Distribución porcentual del Nitrato
en el estudio de contaminación del agua en China 2023",
xlab = "Nitrato (mg/L)",
ylab = "Porcentaje (%)",
names.arg = TDF_Nitrato$MC,
ylim = c(0,100)
)
boxplot(Nitrato,
horizontal = TRUE,
main = "Gráfica N°6: Diagrama de caja del Nitrato
en el estudio de contaminación del agua en China 2023",
xlab = "Nitrato (mg/L)",
col = "green",
outline = TRUE)
summary(Nitrato)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.230 1.630 1.980 1.983 2.320 3.840
Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
plot(Ls, Ni_asc,
type = "o",
col = "orange",
lwd = 3,
xlab = "Nitrato (mg/L)",
ylab = "Frecuencia acumulada",
main = "Gráfica N°7: Ojiva Ascendente y Descendente")
lines(Li, Ni_desc,
type = "o",
col = "green",
lwd = 3)
Hi_asc <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))
plot(Ls, Hi_asc,
type = "o",
col = "blue",
lwd = 3,
xlab = "Nitrato (mg/L)",
ylab = "Porcentaje acumulado (%)",
main = "Gráfica N°8: Ojiva porcentual Ascendente y Descendente")
lines(Li, Hi_desc,
type = "o",
col = "red",
lwd = 3)
media <- round(mean(Nitrato),2)
mediana <- median(Nitrato)
max_ni <- max(TDF_Nitrato$ni)
moda <- TDF_Nitrato$MC[TDF_Nitrato$ni == max_ni]
media
## [1] 1.98
mediana
## [1] 1.98
moda
## [1] 1.885
varianza <- var(Nitrato)
sd <- sd(Nitrato)
cv <- round((sd/media)*100,2)
varianza
## [1] 0.2579445
sd
## [1] 0.5078824
cv
## [1] 25.65
library(e1071)
asimetria <- skewness(Nitrato, type = 2)
curtosis <- kurtosis(Nitrato)
asimetria
## [1] 0.06061787
curtosis
## [1] -0.0163758
tabla_indicadores <- data.frame(
"Variable" = "Nitrato (mg/L)",
"Rango" = paste0("[",min(Nitrato),";",max(Nitrato),"]"),
"X" = media,
"Me" = round(mediana,2),
"Mo" = moda,
"V" = round(varianza,2),
"Sd" = round(sd,2),
"Cv" = cv,
"As" = round(asimetria,2),
"K" = round(curtosis,2)
)
kable(tabla_indicadores, align='c',
caption="Conclusiones de la variable Nitrato (mg/L)")
| Variable | Rango | X | Me | Mo | V | Sd | Cv | As | K |
|---|---|---|---|---|---|---|---|---|---|
| Nitrato (mg/L) | [0.23;3.84] | 1.98 | 1.98 | 1.885 | 0.26 | 0.51 | 25.65 | 0.06 | -0.02 |
La variable Nitrato (mg/L) fluctúa entre 0.23 y 3.84, y sus valores giran en torno a 1.98 mg/L, con una desviación estándar de 0.51, siendo un conjunto de datos con variabilidad moderada (CV = 25.65%).Los valores se distribuyen de manera prácticamente simétrica (As ≈ 0.06), lo que indica que no existe una concentración marcada hacia valores altos o bajos, y presentan una curtosis ligeramente negativa (K = -0.02), evidenciando una distribución ligeramente más plana que la normal.Por lo anterior, el comportamiento del Nitrato (mg/L) puede considerarse estable y dentro de rangos adecuados para el análisis de la calidad del agua en China durante el año 2023.