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

## [1] "~/Camila/Estadística/R"

# Establecer directorio y cargar datos 
setwd("~/Camila/Estadística/R") 
datos<- read.csv("china_water_pollution_data.csv",header 
                 = TRUE, sep = ";", dec = ",")

#Extracción Variable Cuantitativa Discreta
Fósforo <- datos$Total_Phosphorus_mg_L

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

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(Fósforo >= Li[i] - tol & Fósforo < Ls[i] + tol)
  } else {
    ni[i] <- sum(Fósforo >= Li[i] - tol & Fósforo <= Ls[i] + tol)
  }
}

sum(ni)
## [1] 3091
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_Fósforo <- data.frame(
  Li, Ls, Mc, ni, round(hi, 2), Ni_asc, Ni_desc, round(Hi_asc, 2), round(Hi_desc, 2)
)

colnames(TDF_Fósforo)<- 
  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_Fósforo<-rbind(TDF_Fósforo,totales)

#Simplificación con el histograma
Hist_Fósforo<-hist(Fósforo,breaks = 8,plot = F)
k<-length(Hist_Fósforo$breaks)
Li<-Hist_Fósforo$breaks[1:(length(Hist_Fósforo$breaks)-1)]
Ls<-Hist_Fósforo$breaks[2:length(Hist_Fósforo$breaks)]
ni<-Hist_Fósforo$counts
sum(ni)
## [1] 3000
Mc<-Hist_Fósforo$mids
hi<-(ni/sum(ni))
sum(hi)
## [1] 1
Ni_asc<-cumsum(ni)
Hi_asc<-cumsum(hi)
Ni_desc<-rev(cumsum(rev(ni)))
Hi_desc<-rev(cumsum(rev(hi)))
TDF_Fósforo<-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_Fósforo)<-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_Fósforo_total<-rbind(TDF_Fósforo,totales)

library(knitr)
library(kableExtra)
kable(TDF_Fósforo_total, align = 'c', caption = "Tabla de Frecuencias de fósforo
      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 fósforo 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.1 -0.05 -0.08 4 0.13 4 3000 0.13 100
-0.05 0 -0.03 66 2.2 70 2996 2.33 99.87
0 0.05 0.03 418 13.93 488 2930 16.27 97.67
0.05 0.1 0.08 997 33.23 1485 2512 49.5 83.73
0.1 0.15 0.12 1030 34.33 2515 1515 83.83 50.5
0.15 0.2 0.18 425 14.17 2940 485 98 16.17
0.2 0.25 0.23 59 1.97 2999 60 99.97 2
0.25 0.3 0.28 1 0.03 3000 1 100 0.03
TOTAL
3000 100
# GRAFICAS
#Histograma
hist(Fósforo,breaks = 10,
     main = "Gráfica N°1: Distribución de la cantidad de fósforo  
     de estudio de contaminación del agua en China en el año 2023",
     xlab = "Fósforo (mg/L)",
     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_Fósforo$breaks,labels = Hist_Fósforo$breaks,las=1,
     cex.axis=0.9)

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

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

# Local
hist(Fósforo, breaks = 10,
     main ="Gráfica N°4: Distribución porcentual para el fósforo
     de estudio de contaminación del agua en China en el año 2023",
     xlab = "Fósforo (mg/L)",
     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_Fósforo$breaks,
     labels = Hist_Fósforo$breaks, las = 1,
     cex.axis = 0.9)

# Barplot de porcentajes
barplot(TDF_Fósforo$hi,space=0,
        col = "lightblue",
        main ="Gráfica N°5: Distribución porcentual para el fósforo
        de estudio de contaminación del agua en China en el año 2023",
        xlab="Fósforo (mg/L)",
        ylab="Porcentaje",
        ylim = c(0,40),
        names.arg = round(TDF_Fósforo$MC))

# Diagrama de Caja
boxplot(Fósforo,
        horizontal = TRUE,
        main = "Gráfica N°8: Distribución de frecuencia para el fósforo
    de estudio de contaminación del agua en China
     en el año 2023 ",
        xlab = "Fósforo (mg/L)",
        col = "purple",
        outline = TRUE,
        pch = 1)

# Diagrama de Ojiva Ascendente y Descendente
plot(Li, Ni_asc,
     main = "Gráfica N°6: Distribución de frecuencias acumuladas Ascendente y 
     Descendente para el fósforo de estudio de contaminación del agua en China
     en el año 2023",
     xlab = "Fósforo (mg/L)",
     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 Ascendente y Descendente Porcentual
plot(Li, Hi_desc *100,
     main = "Gráfica N°6: Distribución porcentual acumulada Ascendente y 
     Descendente para el fósforo de estudio de contaminación del agua en China
     en el año 2023",
     xlab = "Fósforo (mg/L)",
     ylab = "Cantidad",
     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 aritmética
media <- round(mean(Fósforo), 2)
media
## [1] 0.1
# Moda
max_ni <- max(TDF_Fósforo$ni)
moda <- TDF_Fósforo$MC[TDF_Fósforo$ni == max_ni]
moda
## [1] 0.12
# Mediana
mediana <- median(Fósforo)
mediana
## [1] 0.102
# INDICADORES DE DISPERSIÓN

# Varianza
varianza <- var(Fósforo)
varianza
## [1] 0.002510863
# Desviación Estándar
sd <- sd(Fósforo)
sd
## [1] 0.05010851
# Coeficiente de Variación
cv <- round((sd / media) * 100, 2)
cv
## [1] 50.11
# INDICADORES DE FORMA

# Asimetría
library(e1071)
asimetria <- skewness(Fósforo, type = 2)
asimetria
## [1] -0.05990401
#Curtosis
curtosis <- kurtosis(Fósforo)
curtosis
## [1] -0.1462653
tabla_indicadores <- data.frame("Variable" =c("Fósforo (mg/L)"),
                                "Rango" = c("[136.85;842.49]"),
                                "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")
library(knitr)
kable(tabla_indicadores, align = 'c', caption = "Conclusiones de la variable
      Fósforo (mg/L)")
Conclusiones de la variable Fósforo (mg/L)
Variable Rango X Me Mo V Sd Cv As K Valores.Atipicos
Fósforo (mg/L) [136.85;842.49] 0.1 0.1 0.12 0 0.05 50.11 -0.06 -0.15 Sí existen