# 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 = ".")
Plomo <- datos$Heavy_Metals_Pb_ug_L
Plomo <- na.omit(Plomo)
Plomo <- Plomo[Plomo >= 0]
n <- length(Plomo)
n
## [1] 2973
minimo <- min(Plomo)
maximo <- max(Plomo)
K <- floor(1 + 3.322 * log10(n))
# Creamos el rango y lo guardamos bien
rango_ajustado <- seq(from = minimo - 0.01, to = maximo + 0.01, length.out = K + 1)
intervalos <- cut(Plomo, breaks = rango_ajustado, include.lowest = TRUE, right = TRUE)
ni <- as.numeric(table(intervalos))
# Parche para asegurar los 3000
if(sum(ni) != n){
ni[which.max(ni)] <- ni[which.max(ni)] + (n - sum(ni))
}
Li <- rango_ajustado[-length(rango_ajustado)]
Ls <- rango_ajustado[-1]
Mc <- (Li + Ls)/2
hi <- (ni / sum(ni)) * 100
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)
TDF_Plomo <- data.frame(
Lim_inf = Li,
Lim_sup = Ls,
MC = Mc,
ni = ni,
hi = hi,
Ni_asc = Ni_asc,
Hi_asc = Hi_asc
)
kable(TDF_Plomo, digits = 3, align = "c",
col.names = c("Lím. Inf.", "Lím. Sup.", "MC", "ni", "hi (%)", "Ni Asc.", "Hi Asc. (%)"),
caption = paste("TABLA FINAL - TOTAL DATOS:", sum(ni))) %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Lím. Inf. | Lím. Sup. | MC | ni | hi (%) | Ni Asc. | Hi Asc. (%) |
|---|---|---|---|---|---|---|
| 0.000 | 1.052 | 0.526 | 56 | 1.884 | 56 | 1.884 |
| 1.052 | 2.103 | 1.577 | 147 | 4.945 | 203 | 6.828 |
| 2.103 | 3.155 | 2.629 | 298 | 10.024 | 501 | 16.852 |
| 3.155 | 4.207 | 3.681 | 502 | 16.885 | 1003 | 33.737 |
| 4.207 | 5.258 | 4.732 | 637 | 21.426 | 1640 | 55.163 |
| 5.258 | 6.310 | 5.784 | 563 | 18.937 | 2203 | 74.100 |
| 6.310 | 7.362 | 6.836 | 424 | 14.262 | 2627 | 88.362 |
| 7.362 | 8.413 | 7.887 | 208 | 6.996 | 2835 | 95.358 |
| 8.413 | 9.465 | 8.939 | 95 | 3.195 | 2930 | 98.554 |
| 9.465 | 10.517 | 9.991 | 36 | 1.211 | 2966 | 99.765 |
| 10.517 | 11.568 | 11.042 | 6 | 0.202 | 2972 | 99.966 |
| 11.568 | 12.620 | 12.094 | 1 | 0.034 | 2973 | 100.000 |
La tabla de distribución de frecuencia de los Metales Pesados Plomo 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.
# Usamos el objeto ni del bloque anterior para que coincida perfectamente
Hist_Plomo <- hist(Plomo, breaks = rango_ajustado, plot = FALSE)
TDF_simplificada <- data.frame(
Lim_inf = round(Hist_Plomo$breaks[-length(Hist_Plomo$breaks)], 2),
Lim_sup = round(Hist_Plomo$breaks[-1], 2),
ni = ni,
hi = round((ni/sum(ni))*100, 2)
)
kable(TDF_simplificada, align="c",
caption="Tabla simplificada obtenida mediante hist()") %>%
kable_styling(full_width = FALSE)
| Lim_inf | Lim_sup | ni | hi |
|---|---|---|---|
| 0.00 | 1.05 | 56 | 1.88 |
| 1.05 | 2.10 | 147 | 4.94 |
| 2.10 | 3.15 | 298 | 10.02 |
| 3.15 | 4.21 | 502 | 16.89 |
| 4.21 | 5.26 | 637 | 21.43 |
| 5.26 | 6.31 | 563 | 18.94 |
| 6.31 | 7.36 | 424 | 14.26 |
| 7.36 | 8.41 | 208 | 7.00 |
| 8.41 | 9.46 | 95 | 3.20 |
| 9.46 | 10.52 | 36 | 1.21 |
| 10.52 | 11.57 | 6 | 0.20 |
| 11.57 | 12.62 | 1 | 0.03 |
hist(Plomo, breaks = rango_ajustado,
main = "Gráfica N°1: Distribución de los Metales Pesados Plomo en el estudio de cntaminación del agua en China 2023",
xlab = "MP_Plomo (µg/L)", ylab = "Cantidad",
col = "lightgreen")
hist(Plomo, breaks = 10,
main = "Gráfica N°2: Distribución general de los Metales Pesados Plomo
en el estudio de contaminación del agua en China 2023",
xlab = "MP Plomo (µg/L)",
ylab = "Cantidad",
ylim = c(0, max(ni)),
col = "lightgreen")
barplot(height = TDF_Plomo$hi, space = 0, col = "skyblue",
main = "Gráfica N°3: Distribución porcentual de los Metales Pesados Plomo en el estudio de contaminación del agua en China 2023",
xlab = "MP Plomo (µg/L)", ylab = "Porcentaje (%)",
names.arg = round(TDF_Plomo$MC, 2))
boxplot(Plomo, horizontal = TRUE, col = "green",
main = "Gráfica N°6: Diagrama de caja de los Metales Pesados Plomo en el estudio de contaminación de agua en China 2023",
xlab = "MP Plomo (µg/L)")
Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
plot(Ls, Ni_asc,
type = "o",
col = "orange",
lwd = 3,
xlab = " MP Plomo (µg/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 = "MP Plomo (µg/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(Plomo),2)
mediana <- median(Plomo)
max_ni <- max(TDF_Plomo$ni)
moda <- TDF_Plomo$MC[TDF_Plomo$ni == max_ni]
media
## [1] 5.03
mediana
## [1] 5.01
moda
## [1] 4.7325
varianza <- var(Plomo)
sd <- sd(Plomo)
cv <- round((sd/media)*100,2)
varianza
## [1] 3.82069
sd
## [1] 1.954658
cv
## [1] 38.86
library(e1071)
asimetria <- skewness(Plomo, type = 2)
curtosis <- kurtosis(Plomo)
asimetria
## [1] 0.09947783
curtosis
## [1] -0.140917
tabla_indicadores <- data.frame(
"Variable" = "MP Plomo (µg/L)",
"Rango" = paste0("[",min(Plomo),";",max(Plomo),"]"),
"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 Metales Pesados Plomo (µg/L)")
| Variable | Rango | X | Me | Mo | V | Sd | Cv | As | K |
|---|---|---|---|---|---|---|---|---|---|
| MP Plomo (µg/L) | [0.01;12.61] | 5.03 | 5.01 | 4.7325 | 3.82 | 1.95 | 38.86 | 0.1 | -0.14 |
La variable Metales Pesados Plomo (µg/L) fluctúa entre 0.01 y 12.61 µg/L, y sus valores giran en torno a 5.03 µg/L, con una desviación estándar de 1.95 µg/L, siendo un conjunto de datos con variabilidad moderada (CV = 38.86%). Los valores se distribuyen de manera prácticamente simétrica (As ≈ 0.1), indicando que no existe una concentración marcada hacia valores bajos o altos, y presentan una curtosis ligeramente negativa (K = -0.14), evidenciando una distribución un poco más plana que la normal. Por lo anterior, el comportamiento de la variable Metales Pesados Plomo (µg/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.