1.Carga de datos

# Librerías
library(kableExtra)
library(knitr)
library(magrittr)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(e1071)

# Cargar datos
datos <- read.csv("china_water_pollution_data.csv",
                  header = TRUE,
                  sep = ",",
                  dec = ".")
Longitud <- datos$Longitude

2. Extrancción de la variable

Longitud <- na.omit(Longitud)
Longitud <- Longitud[Longitud >= 0]

n <- length(Longitud)
n
## [1] 3000

3. Tabla de distribución de frecuencia

3.1 Construcción manual (Regla de Sturges)

minimo <- min(Longitud)
maximo <- max(Longitud)

R <- maximo - minimo
K <- floor(1 + 3.322 * log10(n))
A <- R / K

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

ni <- numeric(K)

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

hi <- ni/sum(ni)*100
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)

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

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

kable(TDF_Longitud, align="c",
      caption="Tabla de Frecuencias de Longitud según la Regla de Sturges") %>%
  kable_styling(full_width = FALSE)
Tabla de Frecuencias de Longitud según la Regla de Sturges
Lim inf Lim sup MC ni hi(%) Ni asc Hi asc(%)
100.02 102.10 101.060 236 7.87 236 7.87
102.10 104.18 103.140 248 8.27 484 16.14
104.18 106.26 105.220 265 8.84 749 24.97
106.26 108.34 107.300 260 8.67 1009 33.64
108.34 110.42 109.380 245 8.17 1254 41.81
110.42 112.51 111.465 252 8.40 1506 50.22
112.51 114.59 113.550 252 8.40 1758 58.62
114.59 116.67 115.630 239 7.97 1997 66.59
116.67 118.75 117.710 228 7.60 2225 74.19
118.75 120.83 119.790 261 8.70 2486 82.89
120.83 122.91 121.870 239 7.97 2725 90.86
122.91 125.00 123.955 274 9.14 2999 100.00

3.2. Simplificación

La tabla de distribución de frecuencias de la Longitud fue construida inicialmente aplicando la Regla de Sturges para determinar el número óptimo de clases.

Posteriormente, el procedimiento se simplificó utilizando la función hist(), obteniendo automáticamente los intervalos y frecuencias, confirmando los resultados obtenidos manualmente.

Hist_Longitud <- hist(Longitud,
                     breaks = K,
                     plot = FALSE)

Li <- Hist_Longitud$breaks[-length(Hist_Longitud$breaks)]
Ls <- Hist_Longitud$breaks[-1]
ni <- Hist_Longitud$counts
hi <- round((ni/sum(ni))*100,2)

TDF_simplificada <- data.frame(
  Lim_inf = round(Li,2),
  Lim_sup = round(Ls,2),
  ni = ni,
  hi = hi
)

kable(TDF_simplificada,
      align="c",
      caption="Tabla simplificada obtenida mediante hist()")
Tabla simplificada obtenida mediante hist()
Lim_inf Lim_sup ni hi
100 102 230 7.67
102 104 236 7.87
104 106 247 8.23
106 108 257 8.57
108 110 243 8.10
110 112 239 7.97
112 114 235 7.83
114 116 220 7.33
116 118 239 7.97
118 120 234 7.80
120 122 252 8.40
122 124 244 8.13
124 126 124 4.13

4. Gráficas

4.1 Histograma

hist(Longitud, breaks = 10,
     main = "Gráfica N°1: Distribución de Longitud
     en el estudio de contaminación del agua
     en China en el año 2023",
     xlab = "Longitud(°)",
     ylab = "Cantidad",
     ylim = c(0, max(ni)),
     col = "lightgreen")

4.2 Histograma general

hist(Longitud, breaks = 10,
     main = "Gráfica N°2: Distribución general de la Longitud
     en el estudio de contaminación del agua en China 2023",
     xlab = "Longitud (°)",
     ylab = "Cantidad",
     ylim = c(0, max(ni)),
     col = "lightgreen")

4.3 Histograma Porcentual General

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

5. Diagrama de Caja

boxplot(Longitud,
        horizontal = TRUE,
        main = "Gráfica N°6: Diagrama de caja de la Longitud
        en el estudio de contaminación del agua en China 2023",
        xlab = "Longitud (°)",
        col = "green",
        outline = TRUE)

summary(Longitud)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   100.0   106.3   112.4   112.5   119.0   125.0

6. Ojivas

6.1 Ojivas Ascendentes y Descendentes (ni)

Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))

plot(Ls, Ni_asc,
     type = "o",
     col = "orange",
     lwd = 3,
     xlab = "Longitud (°)",
     ylab = "Frecuencia acumulada",
     main = "Gráfica N°7: Ojiva Ascendente y Descendente")

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

6.2 Ojivas Ascendentes y Descendentes (hi)

Hi_asc <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))

plot(Ls, Hi_asc,
     type = "o",
     col = "blue",
     lwd = 3,
     xlab = "Longitud (°)",
     ylab = "Porcentaje acumulado (%)",
     main = "Gráfica N°8: Ojiva porcentual Ascendente y Descendente")

lines(Li, Hi_desc,
      type = "o",
      col = "red",
      lwd = 3)

7. Indicadores Estadísticos

7.1 Indicadores de Tendencia Central

media <- round(mean(Longitud),2)
mediana <- median(Longitud)

max_ni <- max(TDF_Longitud$ni)
moda <- TDF_Longitud$MC[TDF_Longitud$ni == max_ni]

media
## [1] 112.55
mediana
## [1] 112.4403
moda
## [1] 123.955

7.2 Indicadores de Dispersión

varianza <- var(Longitud)
sd <- sd(Longitud)
cv <- round((sd/media)*100,2)

varianza
## [1] 52.41977
sd
## [1] 7.24015
cv
## [1] 6.43

7.3 Indicadores de Forma

library(e1071)

asimetria <- skewness(Longitud, type = 2)
curtosis <- kurtosis(Longitud)

asimetria
## [1] 0.01733435
curtosis
## [1] -1.213753

8. Tabla de Resumen

tabla_indicadores <- data.frame(
  "Variable" = "Longitud (°)",
  "Rango" = paste0("[",min(Longitud),";",max(Longitud),"]"),
  "X" = media,
  "Me" = round(mediana,2),
  "Mo" = moda,
  "V" = round(varianza,2),
  "Sd" = round(sd,2),
  "Cv" = cv,
  "As" = round(asimetria,2),
  "K" = round(curtosis,2)
)

kable(tabla_indicadores, align='c',
      caption="Conclusiones de la variable Longitud (°)")
Conclusiones de la variable Longitud (°)
Variable Rango X Me Mo V Sd Cv As K
Longitud (°) [100.017169;124.995576] 112.55 112.44 123.955 52.42 7.24 6.43 0.02 -1.21

9. Conclusión

La variable Longitud (°) fluctúa entre 100.02° y 124.99°, y sus valores giran en torno a 112.55°, con una desviación estándar de 7.24°, siendo un conjunto de datos con variabilidad relativamente baja (CV = 6.43%). Los valores se distribuyen de manera prácticamente simétrica (As ≈ 0.02), lo que indica que no existe una concentración marcada hacia valores extremos, y presentan una curtosis negativa moderada (K = -1.21), evidenciando una distribución más plana que la normal. Por lo anterior, el comportamiento de la variable Longitud (°) puede considerarse estable y representativo de la dispersión geográfica en el estudio de contaminación del agua en China durante el año 2023.