# 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 = ".")
Temperatura <- datos$Water_Temperature_C
Temperatura <- na.omit(Temperatura)
Temperatura <- Temperatura[Temperatura >= 0]
n <- length(Temperatura)
n
## [1] 3000
minimo <- min(Temperatura)
maximo <- max(Temperatura)
R <- maximo - minimo
K <- floor(1 + 3.322 * log10(n))
A <- R / K
# Generar límites correctamente
Li <- round(seq(from = minimo, to = maximo, length.out = K), 2)
Ls <- c(Li[-1], round(maximo,2)) # Forzamos que el último límite superior sea el máximo exacto
Mc <- (Li + Ls)/2
ni <- numeric(K)
for (i in 1:K) {
if (i < K) {
ni[i] <- sum(Temperatura >= Li[i] & Temperatura < Ls[i])
} else {
ni[i] <- sum(Temperatura >= Li[i] & Temperatura <= Ls[i]) # último intervalo incluye máximo
}
}
hi <- ni/sum(ni)*100
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)
TDF_Temperatura <- data.frame(Li, Ls, Mc, ni, round(hi,2), Ni_asc, round(Hi_asc,2))
colnames(TDF_Temperatura) <- c("Lim inf","Lim sup","MC","ni","hi(%)","Ni asc","Hi asc(%)")
kable(TDF_Temperatura, align="c",
caption="Tabla de Frecuencias de la Temperatura del Agua según la Regla de Sturges") %>%
kable_styling(full_width = FALSE)
| Lim inf | Lim sup | MC | ni | hi(%) | Ni asc | Hi asc(%) |
|---|---|---|---|---|---|---|
| 3.39 | 6.42 | 4.905 | 11 | 0.37 | 11 | 0.37 |
| 6.42 | 9.46 | 7.940 | 31 | 1.03 | 42 | 1.40 |
| 9.46 | 12.49 | 10.975 | 136 | 4.53 | 178 | 5.93 |
| 12.49 | 15.53 | 14.010 | 359 | 11.97 | 537 | 17.90 |
| 15.53 | 18.56 | 17.045 | 619 | 20.63 | 1156 | 38.53 |
| 18.56 | 21.60 | 20.080 | 748 | 24.93 | 1904 | 63.47 |
| 21.60 | 24.63 | 23.115 | 562 | 18.73 | 2466 | 82.20 |
| 24.63 | 27.67 | 26.150 | 353 | 11.77 | 2819 | 93.97 |
| 27.67 | 30.70 | 29.185 | 136 | 4.53 | 2955 | 98.50 |
| 30.70 | 33.74 | 32.220 | 37 | 1.23 | 2992 | 99.73 |
| 33.74 | 36.77 | 35.255 | 7 | 0.23 | 2999 | 99.97 |
| 36.77 | 36.77 | 36.770 | 1 | 0.03 | 3000 | 100.00 |
La tabla de distribución de frecuencias de la Temperatura 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.
Hist_Temperatura <- hist(Temperatura,
breaks = K,
plot = FALSE)
Li <- Hist_Temperatura$breaks[-length(Hist_Temperatura$breaks)]
Ls <- Hist_Temperatura$breaks[-1]
ni <- Hist_Temperatura$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 |
|---|---|---|---|
| 2 | 4 | 1 | 0.03 |
| 4 | 6 | 9 | 0.30 |
| 6 | 8 | 11 | 0.37 |
| 8 | 10 | 36 | 1.20 |
| 10 | 12 | 84 | 2.80 |
| 12 | 14 | 173 | 5.77 |
| 14 | 16 | 301 | 10.03 |
| 16 | 18 | 400 | 13.33 |
| 18 | 20 | 495 | 16.50 |
| 20 | 22 | 473 | 15.77 |
| 22 | 24 | 386 | 12.87 |
| 24 | 26 | 277 | 9.23 |
| 26 | 28 | 196 | 6.53 |
| 28 | 30 | 87 | 2.90 |
| 30 | 32 | 47 | 1.57 |
| 32 | 34 | 16 | 0.53 |
| 34 | 36 | 5 | 0.17 |
| 36 | 38 | 3 | 0.10 |
hist(Temperatura, breaks = 10,
main = "Gráfica N°1: Distribución de la Temperatura del Agua
en el estudio de contaminación del agua
en China en el año 2023",
xlab = "Temperatura del Agua (°C)",
ylab = "Cantidad",
ylim = c(0, max(ni)),
col = "lightgreen")
hist(Temperatura, breaks = 10,
main = "Gráfica N°2: Distribución general de la Temperatura del Agua
en el estudio de contaminación del agua en China 2023",
xlab = "Temperatura del agua (°C)",
ylab = "Cantidad",
ylim = c(0, max(ni)),
col = "lightgreen")
barplot(
height = TDF_Temperatura$`hi(%)`,
space = 0,
col = "skyblue",
main = "Gráfica N°3: Distribución porcentual de la Temperatura del Agua
en el estudio de contaminación del agua en China 2023",
xlab = "Temperatura del Agua (°C)",
ylab = "Porcentaje (%)",
names.arg = TDF_Temperatura$MC,
ylim = c(0,100)
)
boxplot(Temperatura,
horizontal = TRUE,
main = "Gráfica N°6: Diagrama de caja de la Temperatura del Agua
en el estudio de contaminación del agua en China 2023",
xlab = "Temperatura del Agua (°C)",
col = "green",
outline = TRUE)
summary(Temperatura)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.39 16.71 19.98 20.05 23.31 36.77
Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
plot(Ls, Ni_asc,
type = "o",
col = "orange",
lwd = 3,
xlab = "Temperatura del Agua (°C)",
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 = "Temperatura del agua (°C)",
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(Temperatura),2)
mediana <- median(Temperatura)
max_ni <- max(TDF_Temperatura$ni)
moda <- TDF_Temperatura$MC[TDF_Temperatura$ni == max_ni]
media
## [1] 20.05
mediana
## [1] 19.98
moda
## [1] 20.08
varianza <- var(Temperatura)
sd <- sd(Temperatura)
cv <- round((sd/media)*100,2)
varianza
## [1] 24.23895
sd
## [1] 4.923307
cv
## [1] 24.56
library(e1071)
asimetria <- skewness(Temperatura, type = 2)
curtosis <- kurtosis(Temperatura)
asimetria
## [1] 0.03541246
curtosis
## [1] 0.03852477
tabla_indicadores <- data.frame(
"Variable" = "Temperatura del Agua (°C)",
"Rango" = paste0("[",min(Temperatura),";",max(Temperatura),"]"),
"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 Temperatura del Agua (°C)")
| Variable | Rango | X | Me | Mo | V | Sd | Cv | As | K |
|---|---|---|---|---|---|---|---|---|---|
| Temperatura del Agua (°C) | [3.39;36.77] | 20.05 | 19.98 | 20.08 | 24.24 | 4.92 | 24.56 | 0.04 | 0.04 |
La variable Temperatura del Agua (°C) fluctúa entre 3.39 y 36.77 °C, y sus valores giran en torno a 20.05 °C, con una desviación estándar de 4.92 °C, siendo un conjunto de datos con variabilidad moderada (CV = 24.56%). Los valores se distribuyen de manera prácticamente simétrica (As ≈ 0.04), lo que indica que no existe una concentración marcada hacia temperaturas bajas o altas, y presentan una curtosis cercana a cero (K = 0.04), evidenciando una distribución aproximadamente normal. Por lo anterior, el comportamiento de la variable Temperatura del Agua (°C) puede considerarse estable y representativo para el análisis de la calidad del agua en China durante el año 2023.