#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
Longitud<-datos$Longitude
Longitud <- na.omit(Longitud)

3. Tabla de distribución de frecuencia

#Tabla de distribución de frecuencia

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

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

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

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

colnames(TDFlongitud)<- 
  c("Li","Ls","Mc","ni","hi","Ni_asc(%)","Ni_de
    sc(%)","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="-")

TDFlongitud<-rbind(TDFlongitud,totales)

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

TDFlongitud_total<-rbind(TDFlongitud,totales)


library(knitr)
library(kableExtra)
kable(TDFlongitud_total, align = 'c', caption =
"Tabla de Frecuencias de Longitud
      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 Longitud de estudio de contaminación del agua en China en el año 2023
Lim inf Lim sup
 MC
100 105 102.5 596 19.87 596 3000 19.87 100
105 110 107.5 617 20.57 1213 2404 40.43 80.13
110 115 112.5 591 19.7 1804 1787 60.13 59.57
115 120 117.5 576 19.2 2380 1196 79.33 39.87
120 125 122.5 620 20.67 3000 620 100 20.67
TOTAL
3000 100

4. Gráficas

4.1 Histograma

# GRAFICAS
#Histograma
hist(Longitud,breaks = 10,
     main =
     "Gráfica N°1: Distribución de la cantidad de longitud  
      de estudio de contaminación del agua en 
     China en el año 2023",
     xlab = " Longitud (°)",
     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_Longitud$breaks,labels = 
       Hist_Longitud$breaks,las=1,
     cex.axis=0.9)

4.2 Histograma Globlal

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

4.3 Histograma Porcentual Global

barplot(TDFlongitud$hi,
        space=0,
        col = "skyblue",
        main ="Gráfica N°3: Distribución porcentual de la longitud de
        estudio de contaminación del agua 
        en China en el año 2023 ",
        xlab="Longitud (°)",
        ylab="Porcentaje (%)",
        names.arg =round(TDFlongitud$MC),
        ylim = c(0,100))

4.4 Histograma Local

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

4.5 Histograma Porcentual Local

barplot(TDFlongitud$hi,space=0,
        col = "lightblue",
        main ="Gráfica N°5: Distribución porcentual para la longitud
        de estudio de contaminación del agua
        en China en el año 2023",
        xlab="Longitud (°)",
        ylab="Porcentaje (%)",
        ylim = c(0,30),
        names.arg = round(TDFlongitud$MC))

5. Diagrama de Caja

# Diagrama de Caja

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

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 la longitud de estudio de contaminación del agua
     en China en el año 2023",
     xlab = "Longitud (°)",
     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 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 la longitud de estudio de contaminación del agua 
     en China en el año 2023",
     xlab = "Longitud (°)",
     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(Longitud), 2)
media
## [1] 112.55
# Moda
max_ni <- max(TDFlongitud$ni)
moda <- TDFlongitud$MC[TDFlongitud$ni == max_ni]
moda
## [1] 122.5
# Mediana
mediana <- median(Longitud)
mediana
## [1] 112.4403

7.2 Indicadores de Dispersión

# Varianza
varianza <- var(Longitud)
varianza
## [1] 52.41977
# Desviación Estándar
sd <- sd(Longitud)
sd
## [1] 7.24015
# Coeficiente de Variación
cv <- round((sd / media) * 100, 2)
cv
## [1] 6.43

7.3 Indicadores de Forma

# Asimetría
library(e1071)
asimetria <- skewness(Longitud, type = 2)
asimetria
## [1] 0.01733435
#Curtosis
curtosis <- kurtosis(Longitud)
curtosis
## [1] -1.213753

8. Tabla Resumen

tabla_indicadores <- data.frame("Variable" =c("Longitud (°)"),
                                "Rango" = c("[100.01;124.99]"),
                                "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" = "No hay presencia de valores atípicos")
library(knitr)
kable(tabla_indicadores, align = 'c', caption = "Conclusiones de la variable
      longitud en (°)")
Conclusiones de la variable longitud en (°)
Variable Rango X Me Mo V Sd Cv As K Valores.Atipicos
Longitud (°) [100.01;124.99] 112.55 112.44 122.5 52.42 7.24 6.43 0.02 -1.21 No hay presencia de valores atípicos

9. Conclusión