#Tema: Estadística Descriptiva
#Fecha: 23/11/2025
#Autor:Anahi Sosa
#Carga de librerias
library(knitr)
library(kableExtra)

1. Carga de Datos

#Carga de datos
getwd()
## [1] "/cloud/project"
setwd("/cloud/project")
datos<- read.csv("china_water_pollution_data.csv",header = TRUE, sep = ",", 
                 dec =  ".")

2. Extracción de la variable

#Extracción Variable Cuantitativa Discreta
MP_Cadmio<-datos$Heavy_Metals_Cd_ug_L
MP_Cadmio <- na.omit(MP_Cadmio)
MP_Cadmio<- MP_Cadmio[MP_Cadmio >= 0]
n <- length(MP_Cadmio) 

3. Tabla de distribución de frecuencia

#Manualmente
min <-min(MP_Cadmio)
max <-max(MP_Cadmio)
R <-max-min
K <- floor(1+3.33*log10(length(MP_Cadmio)))
A <-R/K
Li <-round(seq(from=min,to=max-A,by=A),2)
Li[1] <- min(MP_Cadmio)

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(MP_Cadmio >= Li[i] & MP_Cadmio < Ls[i])
  } else {
    ni[i] <- sum(MP_Cadmio >= Li[i] & MP_Cadmio <= Ls[i])
  }
}


sum(ni)
## [1] 2979
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)))

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

colnames(TDFMP_Cadmio)<- 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="-")

TDFMP_Cadmio<-rbind(TDFMP_Cadmio,totales)

#Simplificación con el histograma
Hist_MP_Cadmio<-hist(MP_Cadmio,breaks = 8,plot = F)
k<-length(Hist_MP_Cadmio$breaks)
Li<-Hist_MP_Cadmio$breaks[1:(length(Hist_MP_Cadmio$breaks)-1)]
Ls<-Hist_MP_Cadmio$breaks[2:length(Hist_MP_Cadmio$breaks)]
ni<-Hist_MP_Cadmio$counts
sum(ni)
## [1] 2979
Mc<-Hist_MP_Cadmio$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)))
TDFMP_Cadmio<-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(TDFMP_Cadmio)<-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="-")

TDFMP_Cadmio_total<-rbind(TDFMP_Cadmio,totales)


library(knitr)
library(kableExtra)
kable(TDFMP_Cadmio_total, align = 'c', caption = "Tabla de Frecuencias de metales pesados
de Cadmio 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 metales pesados de Cadmio 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 0.2 0.1 193 6.48 193 2979 6.48 100
0.2 0.4 0.3 719 24.14 912 2786 30.61 93.52
0.4 0.6 0.5 1190 39.95 2102 2067 70.56 69.39
0.6 0.8 0.7 699 23.46 2801 877 94.02 29.44
0.8 1 0.9 163 5.47 2964 178 99.5 5.98
1 1.2 1.1 14 0.47 2978 15 99.97 0.5
1.2 1.4 1.3 1 0.03 2979 1 100 0.03
TOTAL
2979 100

4. Gráficas

4.1 Histograma

#Histograma
hist(MP_Cadmio,breaks = 10,
     main = "Gráfica N°1: Distribución de la cantidad de metales pesados
     de Cadmio de estudio de contaminación del agua 
     en China en el año 2023",
     xlab = " Metales Pesados - Cadmio (ug/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_MP_Cadmio$breaks,labels = Hist_MP_Cadmio$breaks,las=1,
     cex.axis=0.9)

4.2 Histograma Globlal

# Gráfico
hist(MP_Cadmio, breaks = 10,
     main = "Gráfica N°2: Distribución de la cantidad de metales pesados
     de cadmio en el estudio de contaminación 
     del agua en China 2023",
     xlab = "Metales Pesados Cadmio (µg/L)",
     ylab = "Cantidad",
     ylim = c(0, 2979),
     col = "pink",
     cex.main = 1.3,
     cex.lab = 1,
     cex.axis = 0.9,
     xaxt = "n",
     yaxt = "n")

# Forzar marcas del eje Y incluyendo 2979
ticks_y <- c(seq(0, 2500, by = 500), 2979)

# Eje X
axis(1,
     at = Hist_MP_Cadmio$breaks,
     labels = round(Hist_MP_Cadmio$breaks, 2),
     las = 1,
     cex.axis = 0.9)
axis(2, at = ticks_y,
     labels = ticks_y,
     las = 1,
     cex.axis = 0.9)

4.3 Histograma Porcentual Global

barplot(
  height = TDFMP_Cadmio$hi,  
  space = 0,
  col = "skyblue",
  main = "Gráfica N°3: Distribución porcentual de metales pesados de Cadmio
  de estudio de contaminación del agua en China en el año 2023",
  xlab = "Metales Pesados - Cadmio (ug/L)",
  ylab = "Porcentaje (%)",
  names.arg = TDFMP_Cadmio$MC,   
  ylim = c(0, 100)
)

4.4 Histograma Local

# Local
hist(MP_Cadmio, breaks = 10,
     main ="Gráfica N°4:Distribución porcentual de metales pesados 
     de cadmio de estudio de contaminación del agua
     en China en el año 2023",
     xlab = "Metales Pesados - Cadmio (ug/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_MP_Cadmio$breaks,
     labels = Hist_MP_Cadmio$breaks, las = 1,
     cex.axis = 0.9)

4.5 Histograma Porcentual Local

barplot(
  height = TDFMP_Cadmio$hi,     
  space = 0,
  col = "skyblue",
  main = "Gráfica N°5: Distribución porcentual de metales pesados de cadmio
  de estudio de contaminación del agua en China en el año 2023",
  xlab = "Metales Pesados - Cadmio (ug/L)",
  ylab = "Porcentaje (%)",
  names.arg = TDFMP_Cadmio$MC,   
  ylim = c(0, 40)
)

5. Diagrama de Caja

boxplot(MP_Cadmio,
        horizontal = TRUE,
        main = "Gráfica N°6:Distribución de frecuencia de metales pesados de 
        cadmio de estudio de contaminación del agua
        en China en el año 2023 ",
        xlab = "Metales Pesados -Cadmio (Ug/L) ",
        col = "purple",
        outline = TRUE,
        pch = 1)

summary(MP_Cadmio)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0000  0.3700  0.5000  0.5046  0.6300  1.3000

6. Ojivas

6.1 Ojivas Ascendente y Descendente (ni)

# Diagrama de Ojiva Ascendente y Descendente
plot(Li, Ni_asc,
     main = "Gráfica N°7: Distribución de frecuencias acumuladas Ascendente y 
     Descendente de metales pesados de cadmio en el estudio
     de contaminación del agua en China, 2023",
     xlab = "Metales Pesados – Cadmio (µg/L)",
     ylab = "Cantidad",
     xlim = c(min(Li), max(Ls)),
     ylim = c(0, 2979),
     col = "orange",
     type = "o",
     lwd = 3,
     las = 1,
     xaxt = "n",
     yaxt = "n",
     cex.axis = 0.8)

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

# Eje X
axis(1, at = Li, las = 1)

# Eje Y completo hasta 2979
axis(2,
     at = c(seq(0, 2500, by = 500), 2979),
     labels = c(seq(0, 2500, by = 500), 2979),
     las = 1)

6.2 Ojiva Ascendente y Descendente (hi)

# Diagrama de Ojiva Ascendente y Descendente Porcentual
plot(Li, Hi_desc *100,
     main = "Gráfica N°8: Distribución porcentual acumulada Ascendente y 
     Descendente de metales pesados de cadmio
     de contaminación del agua en China en el año 2023",
     xlab = "Metales Pesados  - Cadmio (ug/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)

7. Indicadores Estadísticos

7.1 Indicadores de Tendencia Cental

# Media aritmética
media <- round(mean(MP_Cadmio), 2)
media
## [1] 0.5
# Moda
max_ni <- max(TDFMP_Cadmio$ni)
moda <- TDFMP_Cadmio$MC[TDFMP_Cadmio$ni == max_ni]
moda
## [1] 0.5
# Mediana
mediana <- median(MP_Cadmio)
mediana
## [1] 0.5

7.2 Indicadores de Dispersión

# Varianza
varianza <- var(MP_Cadmio)
varianza
## [1] 0.03704278
# Desviación Estándar
sd <- sd(MP_Cadmio)
sd
## [1] 0.192465
# Coeficiente de Variación
cv <- round((sd / media) * 100, 2)
cv
## [1] 38.49

7.3 Indicadores de Forma

# Asimetría
library(e1071)
asimetria <- skewness(MP_Cadmio, type = 2)
asimetria
## [1] 0.0846394
#Curtosis
curtosis <- kurtosis(MP_Cadmio)
curtosis
## [1] -0.130008

8. Tabla Resumen

tabla_indicadores <- data.frame("Variable" =c("Metales Pesados -Cd (ug/L)"),
                                "Rango" = c("[0;1.3]"),
                                "X" = c(media),
                                "Me" = c(round(mediana,2)),
                                "Mo" = c(moda),
                                "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" = "[1.0;1.3]")
library(knitr)
kable(tabla_indicadores, align = 'c', caption = "Conclusiones de la variable
      Metales Pesados -Cd (ug/L)")
Conclusiones de la variable Metales Pesados -Cd (ug/L)
Variable Rango X Me Mo V Sd Cv As K Valores.Atipicos
Metales Pesados -Cd (ug/L) [0;1.3] 0.5 0.5 0.5 0.04 0.19 38.49 0.08 -0.13 [1.0;1.3]

9. Conclusión