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

1. Carga de datos

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

2. Extracción de la variable

#Extracción Variable Cuantitativa Discreta
Fósforo <- datos$Total_Phosphorus_mg_L
Fósforo <- na.omit(Fósforo)

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

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

4. Gráficas

4.1 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)

4.2 Histograma 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)

4.3 Histograma Porcentual Global

barplot(height = round(TDF_Fósforo$hi,0),
        space=0,
        col = "skyblue",
        main ="Gráfica N°3: Distribución porcentualdel 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))

4.4 Histograma 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 = "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)

4.5 Histograma Porcentual Local

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))

5. 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)

summary(Fósforo)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -0.0880  0.0660  0.1020  0.1009  0.1370  0.2740

6. Ojivas

6.1 Ojivas Ascendente y Descendente (ni)

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 = "orange",
     cex.axis = 0.8,
     type = "o",
     lwd = 3,
     las = 1,
     xaxt = "n")

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

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

6.2 Ojivas Ascendente y Descendente (hi)

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)

7. Indicadores Estadísticos

7.1 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

7.2 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

7.3 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

8. Tabla resumen

tabla_indicadores <- data.frame("Variable" =c("Fósforo (mg/L)"),
                                "Rango" = c("[0;0.274]"),
                                "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" = "[-0.0880;0.2740]")
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) [0;0.274] 0.1 0.1 0.12 0 0.05 50.11 -0.06 -0.15 [-0.0880;0.2740]

9. Conclusión