``` r
# LIBRERÍAS
# -----------------------------
library(knitr)
library(kableExtra)
library(e1071)
library(dplyr)
## 
## Attaching package: '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(gt)

# -----------------------------
# CARGA DE DATOS
# -----------------------------
datos <- read.csv("china_water_pollution_data.csv",
                  header = TRUE, sep = ",", dec = ".")

Temperatura <- na.omit(datos$Water_Temperature_C)

# -----------------------------
# TABLA DE FRECUENCIAS (K = 8)
# -----------------------------
K <- 8
Hist_Temperatura <- hist(Temperatura, breaks = K, plot = FALSE)

Li <- Hist_Temperatura$breaks[-length(Hist_Temperatura$breaks)]
Ls <- Hist_Temperatura$breaks[-1]
ni <- Hist_Temperatura$counts
Mc <- Hist_Temperatura$mids

n <- sum(ni)
hi <- (ni / n) * 100

Ni_asc  <- cumsum(ni)
Hi_asc  <- cumsum(hi)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_desc <- rev(cumsum(rev(hi)))

TDFTemperatura <- data.frame(
  `Lim inf`    = round(Li, 2),
  `Lim sup`    = round(Ls, 2),
  MC           = round(Mc, 2),
  ni           = ni,
  `hi(%)`      = round(hi, 2),
  `Ni asc`     = Ni_asc,
  `Ni desc`    = Ni_desc,
  `Hi asc(%)`  = round(Hi_asc, 2),
  `Hi desc(%)` = round(Hi_desc, 2),
  check.names = FALSE
)

# Fila TOTAL
totales <- as.data.frame(as.list(rep("-", ncol(TDFTemperatura))),
                         stringsAsFactors = FALSE)
names(totales) <- names(TDFTemperatura)

totales[1, "Lim inf"] <- "TOTAL"
totales[1, "ni"]      <- sum(TDFTemperatura$ni)
totales[1, "hi(%)"]   <- 100

TDFTemperatura_total <- rbind(TDFTemperatura, totales)

# ============================================================
# TABLA N°1
# ============================================================
kable(TDFTemperatura_total, align = "c",
      caption = "Tabla N°1: Tabla de Frecuencias de la Temperatura del Agua en el 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 N°1: Tabla de Frecuencias de la Temperatura del Agua en el 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 5 2.5 5 0.17 5 3000 0.17 100
5 10 7.5 52 1.73 57 2995 1.9 99.83
10 15 12.5 392 13.07 449 2943 14.97 98.1
15 20 17.5 1061 35.37 1510 2551 50.33 85.03
20 25 22.5 1008 33.6 2518 1490 83.93 49.67
25 30 27.5 411 13.7 2929 482 97.63 16.07
30 35 32.5 66 2.2 2995 71 99.83 2.37
35 40 37.5 5 0.17 3000 5 100 0.17
TOTAL
3000 100
# ============================================================
# GRÁFICA N°1
# ============================================================
hist(Temperatura, breaks = Hist_Temperatura$breaks,
     main = "Gráfica N°1: Distribución de la Temperatura del Agua\nen el estudio de contaminación del agua en China en el año 2023",
     xlab = "Temperatura del Agua (°C)",
     ylab = "Cantidad",
     ylim = c(0, max(ni) + 50),
     col = "pink",
     xaxt = "n")
axis(1, at = Hist_Temperatura$breaks,
     labels = round(Hist_Temperatura$breaks, 1), las = 1)

# ============================================================
# TABLA N°2
# ============================================================
kable(TDFTemperatura_total, align = "c",
      caption = "Tabla N°2: Tabla de Frecuencias de la Temperatura del Agua posterior a la representación gráfica en el 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 N°2: Tabla de Frecuencias de la Temperatura del Agua posterior a la representación gráfica en el 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 5 2.5 5 0.17 5 3000 0.17 100
5 10 7.5 52 1.73 57 2995 1.9 99.83
10 15 12.5 392 13.07 449 2943 14.97 98.1
15 20 17.5 1061 35.37 1510 2551 50.33 85.03
20 25 22.5 1008 33.6 2518 1490 83.93 49.67
25 30 27.5 411 13.7 2929 482 97.63 16.07
30 35 32.5 66 2.2 2995 71 99.83 2.37
35 40 37.5 5 0.17 3000 5 100 0.17
TOTAL
3000 100
# ============================================================
# GRÁFICA N°2
# ============================================================
hist(Temperatura, breaks = Hist_Temperatura$breaks,
     main = "Gráfica N°2: Distribución global de la Temperatura del Agua\nen el estudio de contaminación del agua en China en el año 2023",
     xlab = "Temperatura del Agua (°C)",
     ylab = "Cantidad",
     col = "pink",
     xaxt = "n")
axis(1, at = Hist_Temperatura$breaks,
     labels = round(Hist_Temperatura$breaks, 1), las = 1)

# ============================================================
# GRÁFICA N°3
# ============================================================
barplot(TDFTemperatura$`hi(%)`,
        space = 0,
        col = "skyblue",
        main = "Gráfica N°3: Distribución porcentual de la Temperatura del Agua\nen el estudio de contaminación del agua en China en el año 2023",
        xlab = "Temperatura del Agua (°C)",
        ylab = "Porcentaje (%)",
        names.arg = round(TDFTemperatura$MC),
        ylim = c(0, max(TDFTemperatura$`hi(%)`) + 5))

# ============================================================
# GRÁFICA N°4
# ============================================================
hist(Temperatura, breaks = Hist_Temperatura$breaks,
     main = "Gráfica N°4: Distribución local de la Temperatura del Agua\nen el estudio de contaminación del agua en China en el año 2023",
     xlab = "Temperatura del Agua (°C)",
     ylab = "Cantidad",
     col = "purple",
     xaxt = "n")
axis(1, at = Hist_Temperatura$breaks,
     labels = round(Hist_Temperatura$breaks, 1), las = 1)

# ============================================================
# GRÁFICA N°5
# ============================================================
barplot(TDFTemperatura$`hi(%)`,
        space = 0,
        col = "lightblue",
        main = "Gráfica N°5: Distribución porcentual de la Temperatura del Agua\nen el estudio de contaminación del agua en China en el año 2023",
        xlab = "Temperatura del Agua (°C)",
        ylab = "Porcentaje (%)",
        names.arg = round(TDFTemperatura$MC),
        ylim = c(0, max(TDFTemperatura$`hi(%)`) + 5))

# ============================================================
# GRÁFICA N°6
# ============================================================
plot(Li, Ni_asc, type = "o",
     main = "Gráfica N°6: Distribución de frecuencias acumuladas de la Temperatura del Agua\nen el estudio de contaminación del agua en China en el año 2023",
     xlab = "Temperatura del Agua (°C)",
     ylab = "Frecuencia acumulada",
     col = "orange",
     xaxt = "n")
lines(Ls, Ni_desc, col = "green", type = "o")
axis(1, at = Li, labels = round(Li,1), las = 1)

# ============================================================
# GRÁFICA N°7
# ============================================================
plot(Li, Hi_desc, type = "o",
     main = "Gráfica N°7: Distribución porcentual acumulada de la Temperatura del Agua\nen el estudio de contaminación del agua en China en el año 2023",
     xlab = "Temperatura del Agua (°C)",
     ylab = "Porcentaje acumulado (%)",
     col = "red",
     xaxt = "n")
lines(Ls, Hi_asc, col = "blue", type = "o")
axis(1, at = Li, labels = round(Li,1), las = 1)

# ============================================================
# GRÁFICA N°8
# ============================================================
boxplot(Temperatura, horizontal = TRUE,
        main = "Gráfica N°8: Diagrama de caja de la Temperatura del Agua\nen el estudio de contaminación del agua en China en el año 2023",
        xlab = "Temperatura del Agua (°C)",
        col = "purple")

# ============================================================
# TABLA N°3: INDICADORES ESTADÍSTICOS
# ============================================================
media    <- round(mean(Temperatura), 2)
mediana  <- round(median(Temperatura), 2)
varianza <- round(var(Temperatura), 2)
sd_temp  <- round(sd(Temperatura), 2)
cv       <- round((sd(Temperatura) / mean(Temperatura)) * 100, 2)
asim     <- round(skewness(Temperatura, type = 2), 2)
curt     <- round(kurtosis(Temperatura), 2)

max_frec  <- max(TDFTemperatura$ni)
moda_vals <- TDFTemperatura$MC[TDFTemperatura$ni == max_frec]
Mo_txt    <- paste(round(moda_vals, 2), collapse = ", ")

out <- boxplot.stats(Temperatura)$out
val_atip <- ifelse(length(out) == 0,
                   "No hay presencia de valores atípicos",
                   paste("Hay", length(out), "valores atípicos"))

tabla_indicadores <- data.frame(
  Variable = "Temperatura del Agua (°C)",
  Rango = paste0("[", round(min(Temperatura),2), " ; ", round(max(Temperatura),2), "]"),
  X = media,
  Me = mediana,
  Mo = Mo_txt,
  V = varianza,
  Sd = sd_temp,
  Cv = cv,
  As = asim,
  K = curt,
  `Valores Atípicos` = val_atip
)

kable(tabla_indicadores, align = "c",
      caption = "Tabla N°3: Indicadores estadísticos de la Temperatura del Agua en el 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 N°3: Indicadores estadísticos de la Temperatura del Agua en el estudio de contaminación del agua en China en el año 2023
Variable Rango X Me Mo V Sd Cv As K Valores.Atípicos
Temperatura del Agua (°C) [3.39 ; 36.77] 20.05 19.98 17.5 24.24 4.92 24.55 0.04 0.04 Hay 29 valores atípicos