# 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 = ".")
Calidad<- datos$Water_Quality_Index
Calidad <- na.omit(Calidad)
Calidad <- Calidad[Calidad >= 0]
n <- length(Calidad)
n
## [1] 3000
minimo <- min(Calidad)
maximo <- max(Calidad)
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(Calidad, 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_Calidad <- data.frame(
Lim_inf = Li,
Lim_sup = Ls,
MC = Mc,
ni = ni,
hi = hi,
Ni_asc = Ni_asc,
Hi_asc = Hi_asc
)
kable(TDF_Calidad, 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.010 | 8.321 | 4.155 | 257 | 8.567 | 257 | 8.567 |
| 8.321 | 16.652 | 12.486 | 251 | 8.367 | 508 | 16.933 |
| 16.652 | 24.983 | 20.817 | 253 | 8.433 | 761 | 25.367 |
| 24.983 | 33.313 | 29.148 | 228 | 7.600 | 989 | 32.967 |
| 33.313 | 41.644 | 37.479 | 232 | 7.733 | 1221 | 40.700 |
| 41.644 | 49.975 | 45.810 | 260 | 8.667 | 1481 | 49.367 |
| 49.975 | 58.306 | 54.140 | 250 | 8.333 | 1731 | 57.700 |
| 58.306 | 66.637 | 62.471 | 266 | 8.867 | 1997 | 66.567 |
| 66.637 | 74.968 | 70.802 | 250 | 8.333 | 2247 | 74.900 |
| 74.968 | 83.298 | 79.133 | 240 | 8.000 | 2487 | 82.900 |
| 83.298 | 91.629 | 87.464 | 257 | 8.567 | 2744 | 91.467 |
| 91.629 | 99.960 | 95.795 | 256 | 8.533 | 3000 | 100.000 |
La tabla de distribución de frecuencia del Indice de la calidad del agua 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_Calidad <- hist(Calidad, breaks = rango_ajustado, plot = FALSE)
TDF_simplificada <- data.frame(
Lim_inf = round(Hist_Calidad$breaks[-length(Hist_Calidad$breaks)], 2),
Lim_sup = round(Hist_Calidad$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.01 | 8.32 | 257 | 8.57 |
| 8.32 | 16.65 | 251 | 8.37 |
| 16.65 | 24.98 | 253 | 8.43 |
| 24.98 | 33.31 | 228 | 7.60 |
| 33.31 | 41.64 | 232 | 7.73 |
| 41.64 | 49.98 | 260 | 8.67 |
| 49.98 | 58.31 | 250 | 8.33 |
| 58.31 | 66.64 | 266 | 8.87 |
| 66.64 | 74.97 | 250 | 8.33 |
| 74.97 | 83.30 | 240 | 8.00 |
| 83.30 | 91.63 | 257 | 8.57 |
| 91.63 | 99.96 | 256 | 8.53 |
hist(Calidad, breaks = rango_ajustado,
main = "Gráfica N°1: Distribución del Indice de Calidad del Agua en el estudio de cntaminación del agua en China 2023",
xlab = "Indice de la calidad del Agua", ylab = "Cantidad",
col = "lightgreen")
hist(Calidad, breaks = 10,
main = "Gráfica N°2: Distribución general del Indice de la Calidad del Agua
en el estudio de contaminación del agua en China 2023",
xlab = "Indice de la calidad del Agua",
ylab = "Cantidad",
ylim = c(0, max(ni)),
col = "lightgreen")
barplot(height = TDF_Calidad$hi, space = 0, col = "skyblue",
main = "Gráfica N°3: Distribución porcentual del Indice de la Calidad del Agua en el estudio de contaminación del agua en China 2023",
xlab = "Indice de la calidad del Agua", ylab = "Porcentaje (%)",
names.arg = round(TDF_Calidad$MC, 2))
boxplot(Calidad, horizontal = TRUE, col = "green",
main = "Gráfica N°6: Diagrama de caja del Indice de la Calidad del Agua en el estudio de contaminación de agua en China 2023",
xlab = "Indice de la calidad del Agua")
Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
plot(Ls, Ni_asc,
type = "o",
col = "orange",
lwd = 3,
xlab = "Indice de la calidad del Agua",
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 = "Indice de la calidad del Agua",
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(Calidad),2)
mediana <- median(Calidad)
max_ni <- max(TDF_Calidad$ni)
moda <- TDF_Calidad$MC[TDF_Calidad$ni == max_ni]
media
## [1] 50.26
mediana
## [1] 50.6
moda
## [1] 62.47125
varianza <- var(Calidad)
sd <- sd(Calidad)
cv <- round((sd/media)*100,2)
varianza
## [1] 847.1381
sd
## [1] 29.10564
cv
## [1] 57.91
library(e1071)
asimetria <- skewness(Calidad, type = 2)
curtosis <- kurtosis(Calidad)
asimetria
## [1] -0.01243507
curtosis
## [1] -1.202119
tabla_indicadores <- data.frame(
"Variable" = "Indice de la calidad del Agua",
"Rango" = paste0("[",min(Calidad),";",max(Calidad),"]"),
"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 Indice de la calidad del Agua")
| Variable | Rango | X | Me | Mo | V | Sd | Cv | As | K |
|---|---|---|---|---|---|---|---|---|---|
| Indice de la calidad del Agua | [0;99.95] | 50.26 | 50.6 | 62.47125 | 847.14 | 29.11 | 57.91 | -0.01 | -1.2 |
La variable Índice de la Calidad del Agua fluctúa entre 0 y 99.95, y sus valores giran en torno a 50.26, con una desviación estándar de 29.11, siendo un conjunto de datos con variabilidad alta (CV = 57.91%). Los valores se distribuyen de manera prácticamente simétrica (As ≈ -0.01), indicando que no existe una concentración marcada hacia valores bajos o altos, y presentan una curtosis negativa (K = -1.2), evidenciando una distribución más plana que la normal. Por lo anterior, el comportamiento del Índice de la Calidad del Agua puede considerarse representativo del estado general del agua y útil para la evaluación de la calidad del agua en China durante el año 2023.