1.Carga de datos

# 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 = ".")
Nitrato <- datos$Nitrate_mg_L

2. Extrancción de la variable

Nitrato <- na.omit(Nitrato)
Nitrato <- Nitrato[Nitrato >= 0]

n <- length(Nitrato)
n
## [1] 3000

3. Tabla de distribución de frecuencia

3.1 Construcción manual (Regla de Sturges)

minimo <- min(Nitrato)
maximo <- max(Nitrato)

R <- maximo - minimo
K <- floor(1 + 3.322 * log10(n))
A <- R / K

Li <- round(seq(from = minimo, to = maximo - A, by = A),2)
Ls <- round(seq(from = minimo + A, to = maximo, by = A),2)
Mc <- (Li + Ls)/2

ni <- numeric(K)

for (i in 1:K) {
  if (i < K) {
    ni[i] <- sum(Nitrato >= Li[i] & Nitrato < Ls[i])
  } else {
    ni[i] <- sum(Nitrato >= Li[i] & Nitrato <= Ls[i])
  }
}

hi <- ni/sum(ni)*100
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)

TDF_Nitrato <- data.frame(Li, Ls, Mc, ni, round(hi,2), Ni_asc, round(Hi_asc,2))

colnames(TDF_Nitrato) <- c("Lim inf","Lim sup","MC","ni","hi(%)","Ni asc","Hi asc(%)")

kable(TDF_Nitrato, align="c",
      caption="Tabla de Frecuencias del Nitrato (mg/L) según la Regla de Sturges") %>%
  kable_styling(full_width = FALSE)
Tabla de Frecuencias del Nitrato (mg/L) según la Regla de Sturges
Lim inf Lim sup MC ni hi(%) Ni asc Hi asc(%)
0.23 0.53 0.380 5 0.17 5 0.17
0.53 0.83 0.680 22 0.73 27 0.90
0.83 1.13 0.980 101 3.37 128 4.27
1.13 1.43 1.280 280 9.33 408 13.60
1.43 1.73 1.580 518 17.27 926 30.87
1.73 2.04 1.885 700 23.33 1626 54.20
2.04 2.34 2.190 653 21.77 2279 75.97
2.34 2.64 2.490 411 13.70 2690 89.67
2.64 2.94 2.790 218 7.27 2908 96.93
2.94 3.24 3.090 70 2.33 2978 99.27
3.24 3.54 3.390 15 0.50 2993 99.77
3.54 3.84 3.690 7 0.23 3000 100.00

3.2. Simplificación

La tabla de distribución de frecuencias del Nitrato en (mg/L) 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_Nitrato <- hist(Nitrato,
                     breaks = K,
                     plot = FALSE)

Li <- Hist_Nitrato$breaks[-length(Hist_Nitrato$breaks)]
Ls <- Hist_Nitrato$breaks[-1]
ni <- Hist_Nitrato$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()")
Tabla simplificada obtenida mediante hist()
Lim_inf Lim_sup ni hi
0.0 0.5 4 0.13
0.5 1.0 58 1.93
1.0 1.5 464 15.47
1.5 2.0 1026 34.20
2.0 2.5 998 33.27
2.5 3.0 379 12.63
3.0 3.5 63 2.10
3.5 4.0 8 0.27

4. Gráficas

4.1 Histograma

hist(Nitrato, breaks = 10,
     main = "Gráfica N°1: Distribución del Nitrato
     en el estudio de contaminación del agua
     en China en el año 2023",
     xlab = "Nitrato (mg/L)",
     ylab = "Cantidad",
     ylim = c(0, max(ni)),
     col = "lightgreen")

4.2 Histograma general

hist(Nitrato, breaks = 10,
     main = "Gráfica N°2: Distribución general del Nitrato
     en el estudio de contaminación del agua en China 2023",
     xlab = "Nitrato (mg/L)",
     ylab = "Cantidad",
     ylim = c(0, max(ni)),
     col = "lightgreen")

4.3 Histograma Porcentual General

barplot(
  height = TDF_Nitrato$`hi(%)`,
  space = 0,
  col = "skyblue",
  main = "Gráfica N°3: Distribución porcentual del Nitrato
  en el estudio de contaminación del agua en China 2023",
  xlab = "Nitrato (mg/L)",
  ylab = "Porcentaje (%)",
  names.arg = TDF_Nitrato$MC,
  ylim = c(0,100)
)

5. Diagrama de Caja

boxplot(Nitrato,
        horizontal = TRUE,
        main = "Gráfica N°6: Diagrama de caja del Nitrato
        en el estudio de contaminación del agua en China 2023",
        xlab = "Nitrato (mg/L)",
        col = "green",
        outline = TRUE)

summary(Nitrato)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.230   1.630   1.980   1.983   2.320   3.840

6. Ojivas

6.1 Ojivas Ascendentes y Descendentes (ni)

Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))

plot(Ls, Ni_asc,
     type = "o",
     col = "orange",
     lwd = 3,
     xlab = "Nitrato (mg/L)",
     ylab = "Frecuencia acumulada",
     main = "Gráfica N°7: Ojiva Ascendente y Descendente")

lines(Li, Ni_desc,
      type = "o",
      col = "green",
      lwd = 3)

6.2 Ojivas Ascendentes y Descentes (hi)

Hi_asc <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))

plot(Ls, Hi_asc,
     type = "o",
     col = "blue",
     lwd = 3,
     xlab = "Nitrato (mg/L)",
     ylab = "Porcentaje acumulado (%)",
     main = "Gráfica N°8: Ojiva porcentual Ascendente y Descendente")

lines(Li, Hi_desc,
      type = "o",
      col = "red",
      lwd = 3)

7. Indicadores Estadísticos

7.1 Indicadores de Tendencia Central

media <- round(mean(Nitrato),2)
mediana <- median(Nitrato)

max_ni <- max(TDF_Nitrato$ni)
moda <- TDF_Nitrato$MC[TDF_Nitrato$ni == max_ni]

media
## [1] 1.98
mediana
## [1] 1.98
moda
## [1] 1.885

7.2 Indicadores de Dispersión

varianza <- var(Nitrato)
sd <- sd(Nitrato)
cv <- round((sd/media)*100,2)

varianza
## [1] 0.2579445
sd
## [1] 0.5078824
cv
## [1] 25.65

7.3 Indicadores de Forma

library(e1071)

asimetria <- skewness(Nitrato, type = 2)
curtosis <- kurtosis(Nitrato)

asimetria
## [1] 0.06061787
curtosis
## [1] -0.0163758

8. Tabla de Resumen

tabla_indicadores <- data.frame(
  "Variable" = "Nitrato (mg/L)",
  "Rango" = paste0("[",min(Nitrato),";",max(Nitrato),"]"),
  "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 Nitrato (mg/L)")
Conclusiones de la variable Nitrato (mg/L)
Variable Rango X Me Mo V Sd Cv As K
Nitrato (mg/L) [0.23;3.84] 1.98 1.98 1.885 0.26 0.51 25.65 0.06 -0.02

9. Conclusión

La variable Nitrato (mg/L) fluctúa entre 0.23 y 3.84, y sus valores giran en torno a 1.98 mg/L, con una desviación estándar de 0.51, siendo un conjunto de datos con variabilidad moderada (CV = 25.65%).Los valores se distribuyen de manera prácticamente simétrica (As ≈ 0.06), lo que indica que no existe una concentración marcada hacia valores altos o bajos, y presentan una curtosis ligeramente negativa (K = -0.02), evidenciando una distribución ligeramente más plana que la normal.Por lo anterior, el comportamiento del Nitrato (mg/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.