# Estadística Descriptiva: Nivel de Contaminación
# Autor: Camila Zambrano
# Fecha: 03/12/2025
# Carga de librerías
library(knitr)
library(kableExtra)

#Carga de datos
getwd()
## [1] "C:/Users/Usuario/Documents/Camila/Estadística"
setwd("~/Camila/Estadística/R")
datos<- read.csv("china_water_pollution_data.csv",header = TRUE, sep = ";", 
                 dec = ",")

#Extracción Variable Cuantitativa Discreta
Turbidez <- datos$Turbidity_NTU   # CAMBIADO

#Tabla de distribución de frecuencia
#Manualmente
min <- min(Turbidez)
max <- max(Turbidez)
R <- max - min
K <- floor(1 + 3.33 * log10(length(Turbidez)))
A <- R / K
Li <- round(seq(from = min, to = max - A, by = A), 2)
Li[1] <- min(Turbidez)

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

tol <- 1e-9
ni <- numeric(K)

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

sum(ni)
## [1] 3010
hi <- ni/sum(ni)*100
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_desc <- rev(cumsum(rev(hi)))

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

colnames(TDF_Turbidez)<- 
  c("Li","Ls","Mc","ni","hi","Ni_asc(%)","Ni_desc(%)","Hi_asc","Hi_desc")

#Crear fila de totales
totales <- c(
  Li="-",
  Ls="-",
  Mc="-",
  ni=sum(ni),
  hi=sum(hi),
  Ni_asc="-",
  Ni_desc="-",
  Hi_asc="-",
  Hi_desc="-")

TDF_Turbidez <- rbind(TDF_Turbidez, totales)

#Simplificación con el histograma
Hist_Turbidez <- hist(Turbidez, breaks = 8, plot = F)
k <- length(Hist_Turbidez$breaks)
Li <- Hist_Turbidez$breaks[1:(length(Hist_Turbidez$breaks)-1)]
Ls <- Hist_Turbidez$breaks[2:length(Hist_Turbidez$breaks)]
ni <- Hist_Turbidez$counts
sum(ni)
## [1] 3000
Mc <- Hist_Turbidez$mids
hi <- (ni/sum(ni))
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_desc <- rev(cumsum(rev(hi)))

TDF_Turbidez <- data.frame(Li = round(Li,2),
                           Ls = round(Ls,2),
                           Mc = round(Mc,2),
                           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))

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

#Crear fila de totales
totales <- c(Li="TOTAL",
             Ls="-",
             Mc="-",
             ni=sum(ni),
             hi=sum(hi*100),
             Ni_asc="-",
             Ni_desc="-",
             Hi_asc="-",
             Hi_desc="-")

TDF_Turbidez_total <- rbind(TDF_Turbidez, totales)

kable(TDF_Turbidez_total, align = 'c', caption = 
        "Tabla de Frecuencias de Turbidez
        de 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 de Frecuencias de Turbidez de 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 5 2.5 1911 63.7 1911 3000 63.7 100
5 10 7.5 678 22.6 2589 1089 86.3 36.3
10 15 12.5 272 9.07 2861 411 95.37 13.7
15 20 17.5 94 3.13 2955 139 98.5 4.63
20 25 22.5 32 1.07 2987 45 99.57 1.5
25 30 27.5 6 0.2 2993 13 99.77 0.43
30 35 32.5 4 0.13 2997 7 99.9 0.23
35 40 37.5 1 0.03 2998 3 99.93 0.1
40 45 42.5 1 0.03 2999 2 99.97 0.07
45 50 47.5 1 0.03 3000 1 100 0.03
TOTAL
3000 100
# GRAFICAS
#Histograma
hist(Turbidez, breaks = 10,
     main = "Gráfica N°1: Distribución de la cantidad de turbidez  
     de estudio de contaminación del agua en China en el año 2023",
     xlab = "Turbidez (NTU)",
     ylab = "Cantidad",
     ylim = c(0,max(ni)),
     col = "pink",
     cex.main=1.3,
     cex.lab=1,
     cex.axis=0.9,
     xaxt="n")
axis(1,at=Hist_Turbidez$breaks,labels = Hist_Turbidez$breaks,las=1,
     cex.axis=0.9)

#Global
hist(Turbidez, breaks = 10,
     main = "Gráfica N°2: Distribución de la cantidad de turbidez  
              de estudio de contaminación del agua en China en el año 2023",
     xlab = "Turbidez (NTU)",
     ylab = "Cantidad",
     ylim = c(0, length(Turbidez)),
     col = "lightgreen",
     cex.main = 1.3,
     cex.lab = 1,
     cex.axis = 0.9,
     xaxt = "n")
axis(1, at = Hist_Turbidez$breaks,
     labels = Hist_Turbidez$breaks, las = 1,
     cex.axis = 0.9)

# Barplot de porcentajes
barplot(TDF_Turbidez$hi,
        space=0,
        col = "skyblue",
        main ="Gráfica N°3: Distribución porcentual de frecuencias relativas 
        para la turbidez de estudio de contaminación del agua en China en el año 2023 ",
        xlab="Turbidez (NTU)",
        ylab="Porcentaje",
        names.arg =round(TDF_Turbidez$MC),
        ylim = c(0,100))

# Local
hist(Turbidez, breaks = 10,
     main ="Gráfica N°4: Distribución porcentual para la turbidez
     de estudio de contaminación del agua en China en el año 2023",
     xlab = "Turbidez (NTU)",
     ylab = "Cantidad",
     ylim = c(0,max(ni)),
     col = "purple",
     cex.main = 1.3,
     cex.lab = 1,
     cex.axis = 0.9,
     xaxt = "n")
axis(1, at = Hist_Turbidez$breaks,
     labels = Hist_Turbidez$breaks, las = 1,
     cex.axis = 0.9)

# Barplot de porcentajes
barplot(TDF_Turbidez$hi,space=0,
        col = "lightblue",
        main ="Gráfica N°5: Distribución porcentual para la turbidez
        de estudio de contaminación del agua en China en el año 2023",
        xlab="Turbidez (NTU)",
        ylab="Porcentaje",
        ylim = c(0,70),
        names.arg = round(TDF_Turbidez$MC))

# Diagrama de Caja
boxplot(Turbidez,
        horizontal = TRUE,
        main = "Gráfica N°6: Distribución de frecuencia para la turbidez
    de estudio de contaminación del agua en China
     en el año 2023 ",
        xlab = "Turbidez (NTU)",
        col = "purple",
        outline = TRUE,
        pch = 1)

# Diagrama de Ojiva Ascendente y Descendente
plot(Li, Ni_asc,
     main = "Gráfica N°7: Distribución de frecuencias acumuladas Ascendente y 
     Descendente para la turbidez de estudio de contaminación del agua en China
     en el año 2023",
     xlab = "Turbidez (NTU)",
     ylab = "Cantidad",
     xlim = c(min(Li), max(Ls)),
     col = "lightblue",
     cex.axis = 0.8,
     type = "o",
     lwd = 3,
     las = 1,
     xaxt = "n")

lines(Ls, Ni_desc,
      col = "pink",
      type = "o",
      lwd = 3)

axis(1, at = Li, las = 1)

# Diagrama de Ojiva Porcentual
plot(Li, Hi_desc *100,
     main = "Gráfica N°8: Distribución porcentual acumulada Ascendente y 
     Descendente para la turbidez de estudio de contaminación del agua en China
     en el año 2023",
     xlab = "Turbidez (NTU)",
     ylab = "Porcentaje",
     xlim = c(min(Li), max(Ls)),
     col = "red",
     cex.axis = 0.8,
     type = "o",
     lwd = 3,
     las = 1,
     xaxt = "n")

lines(Ls, Hi_asc *100,
      col = "blue",
      type = "o",
      lwd = 3)

axis(1, at = Li, las = 1)

# INDICADORES ESTADISTICOS

# Indicadores de Tendencia Central

media <- round(mean(Turbidez), 2)
media
## [1] 4.95
# Moda
max_ni <- max(TDF_Turbidez$ni)
moda <- TDF_Turbidez$MC[TDF_Turbidez$ni == max_ni]
moda
## [1] 2.5
# Mediana
mediana <- median(Turbidez)
mediana
## [1] 3.445
# VARIANZA Y DESVIACIÓN TÍPICA
varianza <- var(Turbidez)
sd <- sd(Turbidez)
cv <- round((sd / media) * 100, 2)

# Asimetría y curtosis
library(e1071)
asimetria <- skewness(Turbidez, type = 2)
curtosis <- kurtosis(Turbidez)

# TABLA FINAL
tabla_indicadores <- data.frame("Variable" = c("Turbidez (NTU)"),
                                "Rango" = c(paste0("[", round(min(Turbidez),2),
                                                   ";", round(max(Turbidez),2), "]")),
                                "X" = c(media),
                                "Me" = c(round(mediana,2)),
                                "Mo" = c(round(moda,2)),
                                "V" = c(round(varianza,2)),
                                "Sd" = c(round(sd,2)),
                                "Cv" = c(cv),
                                "As" = c(round(asimetria,2)),
                                "K" = c(round(curtosis,2)),
                                "Valores Atipicos" = "Sí existen")

kable(tabla_indicadores, align = 'c', caption = 
        "Conclusiones de la variable turbidez (NTU)")
Conclusiones de la variable turbidez (NTU)
Variable Rango X Me Mo V Sd Cv As K Valores.Atipicos
Turbidez (NTU) [0;47.48] 4.95 3.45 2.5 24.11 4.91 99.2 1.96 6.07 Sí existen