# LIBRERÍAS
# -----------------------------
library(knitr)
library(kableExtra)
library(e1071)
library(dplyr)
##
## Attaching package: '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(gt)
# -----------------------------
# CARGA DE DATOS
# -----------------------------
datos <- read.csv("china_water_pollution_data.csv",
header = TRUE, sep = ",", dec = ".")
# Extraer y convertir a numérico (robusto)
Plomo_raw <- datos$Heavy_Metals_Pb_ug_L
Plomo_raw <- as.character(Plomo_raw)
Plomo_raw <- gsub(",", ".", Plomo_raw)
Plomo <- suppressWarnings(as.numeric(Plomo_raw))
Plomo <- na.omit(Plomo)
if (length(Plomo) == 0) {
stop(paste0(
"La columna 'Heavy_Metals_Pb_ug_L' no tiene valores numéricos válidos.\n",
"Ejemplos de valores (primeros 20):\n",
paste(head(unique(Plomo_raw), 20), collapse = " | ")
))
}
# -----------------------------
# TABLA DE FRECUENCIAS (K = 8)
# -----------------------------
K <- 8
Hist_Plomo <- hist(Plomo, breaks = K, plot = FALSE)
Li <- Hist_Plomo$breaks[-length(Hist_Plomo$breaks)]
Ls <- Hist_Plomo$breaks[-1]
ni <- Hist_Plomo$counts
Mc <- Hist_Plomo$mids
n <- sum(ni)
hi <- (ni / n) * 100
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_desc <- rev(cumsum(rev(hi)))
TDFPlomo <- data.frame(
`Lim inf` = round(Li, 3),
`Lim sup` = round(Ls, 3),
MC = round(Mc, 3),
ni = ni,
`hi (%)` = round(hi, 2),
`Ni asc` = Ni_asc,
`Ni desc` = Ni_desc,
`Hi asc (%)` = round(Hi_asc, 2),
`Hi desc (%)`= round(Hi_desc, 2),
check.names = FALSE
)
# Fila TOTAL (100 exacto)
totales <- as.data.frame(as.list(rep("-", ncol(TDFPlomo))), stringsAsFactors = FALSE)
names(totales) <- names(TDFPlomo)
totales[1, "Lim inf"] <- "TOTAL"
totales[1, "ni"] <- sum(TDFPlomo$ni)
totales[1, "hi (%)"] <- 100
TDFPlomo_total <- rbind(TDFPlomo, totales)
# ============================================================
# TABLA N°1
# ============================================================
kable(TDFPlomo_total, align = "c",
caption = "Tabla N°1: Tabla de distribución de frecuencias de los metales pesados: Plomo (µg/L) en el estudio de contaminación del agua en China en el año 2023") %>%
kable_styling(full_width = FALSE, position = "center",
bootstrap_options = c("striped","hover","condensed"))
Tabla N°1: Tabla de distribución de frecuencias de los metales pesados:
Plomo (µg/L) en el estudio de contaminación del agua en China en el año
2023
|
Lim inf
|
Lim sup
|
MC
|
ni
|
hi (%)
|
Ni asc
|
Ni desc
|
Hi asc (%)
|
Hi desc (%)
|
|
-4
|
-2
|
-3
|
1
|
0.03
|
1
|
3000
|
0.03
|
100
|
|
-2
|
0
|
-1
|
26
|
0.87
|
27
|
2999
|
0.9
|
99.97
|
|
0
|
2
|
1
|
185
|
6.17
|
212
|
2973
|
7.07
|
99.1
|
|
2
|
4
|
3
|
718
|
23.93
|
930
|
2788
|
31
|
92.93
|
|
4
|
6
|
5
|
1152
|
38.4
|
2082
|
2070
|
69.4
|
69
|
|
6
|
8
|
7
|
720
|
24
|
2802
|
918
|
93.4
|
30.6
|
|
8
|
10
|
9
|
183
|
6.1
|
2985
|
198
|
99.5
|
6.6
|
|
10
|
12
|
11
|
14
|
0.47
|
2999
|
15
|
99.97
|
0.5
|
|
12
|
14
|
13
|
1
|
0.03
|
3000
|
1
|
100
|
0.03
|
|
TOTAL
|
|
|
3000
|
100
|
|
|
|
|
# ============================================================
# GRÁFICA N°1
# ============================================================
hist(Plomo, breaks = Hist_Plomo$breaks,
main = "Gráfica N°1: Distribución de los metales pesados: Plomo (µg/L)\nen el estudio de contaminación del agua en China en el año 2023",
xlab = "Concentración de Plomo (µg/L)",
ylab = "Cantidad de muestras",
col = "pink",
xaxt = "n")
axis(1, at = Hist_Plomo$breaks,
labels = round(Hist_Plomo$breaks, 3), las = 1)

# ============================================================
# TABLA N°2
# ============================================================
kable(TDFPlomo_total, align = "c",
caption = "Tabla N°2: Tabla de distribución de frecuencias de los metales pesados: Plomo (µg/L) posterior a la representación gráfica en el estudio de contaminación del agua en China en el año 2023") %>%
kable_styling(full_width = FALSE, position = "center",
bootstrap_options = c("striped","hover","condensed"))
Tabla N°2: Tabla de distribución de frecuencias de los metales pesados:
Plomo (µg/L) posterior a la representación gráfica en el estudio de
contaminación del agua en China en el año 2023
|
Lim inf
|
Lim sup
|
MC
|
ni
|
hi (%)
|
Ni asc
|
Ni desc
|
Hi asc (%)
|
Hi desc (%)
|
|
-4
|
-2
|
-3
|
1
|
0.03
|
1
|
3000
|
0.03
|
100
|
|
-2
|
0
|
-1
|
26
|
0.87
|
27
|
2999
|
0.9
|
99.97
|
|
0
|
2
|
1
|
185
|
6.17
|
212
|
2973
|
7.07
|
99.1
|
|
2
|
4
|
3
|
718
|
23.93
|
930
|
2788
|
31
|
92.93
|
|
4
|
6
|
5
|
1152
|
38.4
|
2082
|
2070
|
69.4
|
69
|
|
6
|
8
|
7
|
720
|
24
|
2802
|
918
|
93.4
|
30.6
|
|
8
|
10
|
9
|
183
|
6.1
|
2985
|
198
|
99.5
|
6.6
|
|
10
|
12
|
11
|
14
|
0.47
|
2999
|
15
|
99.97
|
0.5
|
|
12
|
14
|
13
|
1
|
0.03
|
3000
|
1
|
100
|
0.03
|
|
TOTAL
|
|
|
3000
|
100
|
|
|
|
|
# ============================================================
# GRÁFICA N°2
# ============================================================
hist(Plomo, breaks = Hist_Plomo$breaks,
main = "Gráfica N°2: Distribución global de los metales pesados: Plomo (µg/L)\nen el estudio de contaminación del agua en China en el año 2023",
xlab = "Concentración de Plomo (µg/L)",
ylab = "Cantidad de muestras",
col = "pink",
xaxt = "n")
axis(1, at = Hist_Plomo$breaks,
labels = round(Hist_Plomo$breaks, 3), las = 1)

# ============================================================
# GRÁFICA N°3
# ============================================================
hist(Plomo, breaks = Hist_Plomo$breaks,
main = "Gráfica N°3: Distribución comparativa de los metales pesados: Plomo (µg/L)\nen el estudio de contaminación del agua en China en el año 2023",
xlab = "Concentración de Plomo (µg/L)",
ylab = "Cantidad de muestras",
col = "green",
xaxt = "n")
axis(1, at = Hist_Plomo$breaks,
labels = round(Hist_Plomo$breaks, 3), las = 1)

# ============================================================
# GRÁFICA N°4
# ============================================================
hist(Plomo, breaks = Hist_Plomo$breaks,
main = "Gráfica N°4: Distribución local de frecuencia de los metales pesados: Plomo (µg/L)\nen el estudio de contaminación del agua en China en el año 2023",
xlab = "Concentración de Plomo (µg/L)",
ylab = "Cantidad de muestras",
col = "purple",
xaxt = "n")
axis(1, at = Hist_Plomo$breaks,
labels = round(Hist_Plomo$breaks, 3), las = 1)

# ============================================================
# GRÁFICA N°5
# ============================================================
intervalos <- paste0("[", round(Li,3), " - ", round(Ls,3), ")")
barplot(round(hi, 2),
names.arg = intervalos,
col = "lightblue",
main = "Gráfica N°5: Distribución porcentual de los metales pesados: Plomo (µg/L)\nen el estudio de contaminación del agua en China en el año 2023",
xlab = "Intervalos de concentración de Plomo (µg/L)",
ylab = "Porcentaje (%)",
las = 2,
cex.names = 0.7)

# ============================================================
# GRÁFICA N°6
# ============================================================
plot(Li, Ni_asc, type = "o",
main = "Gráfica N°6: Distribución de frecuencias acumuladas de los metales pesados: Plomo (µg/L)\nen el estudio de contaminación del agua en China en el año 2023",
xlab = "Concentración de Plomo (µg/L)",
ylab = "Frecuencia acumulada",
col = "orange",
xaxt = "n")
lines(Ls, Ni_desc, col = "green", type = "o")
axis(1, at = Li, labels = round(Li,3), las = 1)

# ============================================================
# GRÁFICA N°7
# ============================================================
plot(Li, Hi_asc, type = "o",
main = "Gráfica N°7: Distribución porcentual acumulada de los metales pesados: Plomo (µg/L)\nen el estudio de contaminación del agua en China en el año 2023",
xlab = "Concentración de Plomo (µg/L)",
ylab = "Porcentaje acumulado (%)",
col = "blue",
xaxt = "n")
lines(Ls, Hi_desc, col = "red", type = "o")
axis(1, at = Li, labels = round(Li,3), las = 1)

# ============================================================
# GRÁFICA N°8
# ============================================================
boxplot(Plomo, horizontal = TRUE,
main = "Gráfica N°8: Diagrama de caja de los metales pesados: Plomo (µg/L)\nen el estudio de contaminación del agua en China en el año 2023",
xlab = "Concentración de Plomo (µg/L)",
col = "purple")

# ============================================================
# TABLA N°3: INDICADORES ESTADÍSTICOS
# ============================================================
media <- round(mean(Plomo), 3)
mediana <- round(median(Plomo), 3)
varianza <- round(var(Plomo), 4)
sd_pb <- round(sd(Plomo), 3)
cv <- round((sd_pb / mean(Plomo)) * 100, 2)
asim <- round(skewness(Plomo, type = 2), 2)
curt <- round(kurtosis(Plomo), 2)
max_frec <- max(TDFPlomo$ni)
moda <- paste(TDFPlomo$MC[TDFPlomo$ni == max_frec], collapse = ", ")
out <- boxplot.stats(Plomo)$out
val_atip <- ifelse(length(out)==0,
"No hay presencia de valores atípicos",
paste(length(out), "valores atípicos"))
tabla_indicadores <- data.frame(
Variable = "Metales pesados: Plomo (µg/L)",
Rango = paste0("[", round(min(Plomo),3), " ; ", round(max(Plomo),3), "]"),
X = media,
Me = mediana,
Mo = moda,
V = varianza,
Sd = sd_pb,
Cv = cv,
As = asim,
K = curt,
Valores_Atipicos = val_atip
)
tabla_indicadores %>%
gt() %>%
tab_header(
title = md("Tabla N°3"),
subtitle = md("*Indicadores estadísticos de la variable Metales pesados: Plomo (µg/L)*")
)
| Tabla N°3 |
| Indicadores estadísticos de la variable Metales pesados: Plomo (µg/L) |
| Variable |
Rango |
X |
Me |
Mo |
V |
Sd |
Cv |
As |
K |
Valores_Atipicos |
| Metales pesados: Plomo (µg/L) |
[-2.94 ; 12.61] |
4.979 |
4.985 |
5 |
4.07 |
2.017 |
40.51 |
-0.04 |
0.07 |
16 valores atípicos |