# 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 = ".")
DBO <- na.omit(datos$BOD_mg_L)
# -----------------------------
# TABLA DE FRECUENCIAS (K = 8)
# -----------------------------
K <- 8
Hist_DBO <- hist(DBO, breaks = K, plot = FALSE)
Li <- Hist_DBO$breaks[-length(Hist_DBO$breaks)]
Ls <- Hist_DBO$breaks[-1]
ni <- Hist_DBO$counts
Mc <- Hist_DBO$mids
n <- sum(ni)
hi <- ni / n
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_desc <- rev(cumsum(rev(hi)))
TDFDBO <- data.frame(
`Lim inf` = round(Li, 3),
`Lim sup` = round(Ls, 3),
MC = round(Mc, 3),
ni = ni,
`hi (%)` = round(hi * 100, 2),
`Ni asc` = Ni_asc,
`Ni desc` = Ni_desc,
`Hi asc (%)` = round(Hi_asc * 100, 2),
`Hi desc (%)`= round(Hi_desc * 100, 2)
)
totales <- data.frame(
`Lim inf` = "TOTAL",
`Lim sup` = "-",
MC = "-",
ni = sum(ni),
`hi (%)` = 100,
`Ni asc` = "-",
`Ni desc` = "-",
`Hi asc (%)` = "-",
`Hi desc (%)`= "-"
)
TDFDBO_total <- rbind(TDFDBO, totales)
# ============================================================
# TABLA N°1
# ============================================================
kable(TDFDBO_total, align = "c",
caption = "Tabla N°1: Tabla de distribución de frecuencias de la Demanda bioquímica de oxígeno (mg/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 la Demanda bioquímica
de oxígeno (mg/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….
|
|
0
|
1
|
0.5
|
4
|
0.13
|
4
|
3000
|
0.13
|
100
|
|
1
|
2
|
1.5
|
58
|
1.93
|
62
|
2996
|
2.07
|
99.87
|
|
2
|
3
|
2.5
|
430
|
14.33
|
492
|
2938
|
16.4
|
97.93
|
|
3
|
4
|
3.5
|
977
|
32.57
|
1469
|
2508
|
48.97
|
83.6
|
|
4
|
5
|
4.5
|
1010
|
33.67
|
2479
|
1531
|
82.63
|
51.03
|
|
5
|
6
|
5.5
|
446
|
14.87
|
2925
|
521
|
97.5
|
17.37
|
|
6
|
7
|
6.5
|
75
|
2.50
|
3000
|
75
|
100
|
2.5
|
|
TOTAL
|
|
|
3000
|
100.00
|
|
|
|
|
# ============================================================
# GRÁFICA N°1
# ============================================================
hist(DBO, breaks = Hist_DBO$breaks,
main = "Gráfica N°1: Distribución de la Demanda bioquímica de oxígeno (mg/L)
en el estudio de contaminación del agua en China en el año 2023",
xlab = "Demanda bioquímica de oxígeno (mg/L)",
ylab = "Cantidad de muestras",
col = "pink",
xaxt = "n")
axis(1, at = Hist_DBO$breaks,
labels = round(Hist_DBO$breaks, 3), las = 1)

# ============================================================
# TABLA N°2
# ============================================================
kable(TDFDBO_total, align = "c",
caption = "Tabla N°2: Tabla de distribución de frecuencias de la Demanda bioquímica de oxígeno (mg/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 la Demanda bioquímica
de oxígeno (mg/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….
|
|
0
|
1
|
0.5
|
4
|
0.13
|
4
|
3000
|
0.13
|
100
|
|
1
|
2
|
1.5
|
58
|
1.93
|
62
|
2996
|
2.07
|
99.87
|
|
2
|
3
|
2.5
|
430
|
14.33
|
492
|
2938
|
16.4
|
97.93
|
|
3
|
4
|
3.5
|
977
|
32.57
|
1469
|
2508
|
48.97
|
83.6
|
|
4
|
5
|
4.5
|
1010
|
33.67
|
2479
|
1531
|
82.63
|
51.03
|
|
5
|
6
|
5.5
|
446
|
14.87
|
2925
|
521
|
97.5
|
17.37
|
|
6
|
7
|
6.5
|
75
|
2.50
|
3000
|
75
|
100
|
2.5
|
|
TOTAL
|
|
|
3000
|
100.00
|
|
|
|
|
# ============================================================
# GRÁFICA N°2
# ============================================================
hist(DBO, breaks = Hist_DBO$breaks,
main = "Gráfica N°2: Distribución global de la Demanda bioquímica de oxígeno (mg/L)
en el estudio de contaminación del agua en China en el año 2023",
xlab = "Demanda bioquímica de oxígeno (mg/L)",
ylab = "Cantidad de muestras",
col = "pink",
xaxt = "n")
axis(1, at = Hist_DBO$breaks,
labels = round(Hist_DBO$breaks, 3), las = 1)

# ============================================================
# GRÁFICA N°3
# ============================================================
hist(DBO, breaks = Hist_DBO$breaks,
main = "Gráfica N°3: Distribución comparativa de la Demanda bioquímica de oxígeno (mg/L)
en el estudio de contaminación del agua en China en el año 2023",
xlab = "Demanda bioquímica de oxígeno (mg/L)",
ylab = "Cantidad de muestras",
col = "green",
xaxt = "n")
axis(1, at = Hist_DBO$breaks,
labels = round(Hist_DBO$breaks, 3), las = 1)

# ============================================================
# GRÁFICA N°4
# ============================================================
hist(DBO, breaks = Hist_DBO$breaks,
main = "Gráfica N°4: Distribución local de frecuencia de la Demanda bioquímica de oxígeno (mg/L)
en el estudio de contaminación del agua en China en el año 2023",
xlab = "Demanda bioquímica de oxígeno (mg/L)",
ylab = "Cantidad de muestras",
col = "purple",
xaxt = "n")
axis(1, at = Hist_DBO$breaks,
labels = round(Hist_DBO$breaks, 3), las = 1)

# ============================================================
# GRÁFICA N°5
# ============================================================
intervalos <- paste0("[", round(Li,3), " - ", round(Ls,3), ")")
barplot(round(hi * 100, 2),
names.arg = intervalos,
col = "lightblue",
main = "Gráfica N°5: Distribución porcentual de la Demanda bioquímica de oxígeno (mg/L)
en el estudio de contaminación del agua en China en el año 2023",
xlab = "Intervalos de demanda bioquímica de oxígeno (mg/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 la Demanda bioquímica de oxígeno (mg/L)
en el estudio de contaminación del agua en China en el año 2023",
xlab = "Demanda bioquímica de oxígeno (mg/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 * 100, type = "o",
main = "Gráfica N°7: Distribución porcentual acumulada de la Demanda bioquímica de oxígeno (mg/L)
en el estudio de contaminación del agua en China en el año 2023",
xlab = "Demanda bioquímica de oxígeno (mg/L)",
ylab = "Porcentaje acumulado (%)",
col = "blue",
xaxt = "n")
lines(Ls, Hi_desc * 100, col = "red", type = "o")
axis(1, at = Li, labels = round(Li,3), las = 1)

# ============================================================
# GRÁFICA N°8
# ============================================================
boxplot(DBO, horizontal = TRUE,
main = "Gráfica N°8: Diagrama de caja de la Demanda bioquímica de oxígeno (mg/L)
en el estudio de contaminación del agua en China en el año 2023",
xlab = "Demanda bioquímica de oxígeno (mg/L)",
col = "purple")

# ============================================================
# TABLA N°3: INDICADORES ESTADÍSTICOS
# ============================================================
media <- round(mean(DBO), 3)
mediana <- round(median(DBO), 3)
varianza <- round(var(DBO), 4)
sd_dbo <- round(sd(DBO), 3)
cv <- round((sd(DBO)/mean(DBO))*100, 2)
asim <- round(skewness(DBO, type = 2), 2)
curt <- round(kurtosis(DBO), 2)
max_frec <- max(TDFDBO$ni)
moda <- paste(TDFDBO$MC[TDFDBO$ni == max_frec], collapse = ", ")
out <- boxplot.stats(DBO)$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 = "Demanda bioquímica de oxígeno (mg/L)",
Rango = paste0("[",round(min(DBO),3)," ; ",round(max(DBO),3),"]"),
X = media,
Me = mediana,
Mo = moda,
V = varianza,
Sd = sd_dbo,
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 Demanda bioquímica de oxígeno (mg/L)*")
)
| Tabla N°3 |
| Indicadores estadísticos de la variable Demanda bioquímica de oxígeno (mg/L) |
| Variable |
Rango |
X |
Me |
Mo |
V |
Sd |
Cv |
As |
K |
Valores_Atipicos |
| Demanda bioquímica de oxígeno (mg/L) |
[0.68 ; 6.97] |
4.015 |
4.03 |
4.5 |
1.0118 |
1.006 |
25.06 |
-0.04 |
-0.16 |
13 valores atípicos |