# Estadística Descriptiva: Temperatura del Agua
# Autor: Grupo 1
# Fecha: 25/11/2025
# Establecer directorio y cargar datos
setwd("C:/Users/LENOVO/OneDrive/Escritorio/ESTADISTICA")
datos <- read.csv("china_water_pollution_data.csv")

# Cargar librerías
library(knitr)
## Warning: package 'knitr' was built under R version 4.5.2
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.5.2
library(magrittr)
## Warning: package 'magrittr' was built under R version 4.5.2
# Preparar variable
Temp_agua <- datos$Water_Temperature_C

# Calcular mínimo y máximo ignorando NA
min_temp <- min(Temp_agua, na.rm = TRUE)
max_temp <- max(Temp_agua, na.rm = TRUE)

# Crear intervalos de 5°C
breaks <- seq(floor(min_temp), ceiling(max_temp), by = 5)
labels <- paste(head(breaks, -1), tail(breaks, -1), sep = "-")

# Asignar valores a intervalos
intervalos <- cut(Temp_agua, breaks = breaks, include.lowest = TRUE,
                  right = FALSE, labels = labels)

# Incluir NA como categoría "Faltante" para que la suma sea 3000
intervalos <- addNA(intervalos)
levels(intervalos)[is.na(levels(intervalos))] <- "Faltante"
# Tabla de frecuencias
TDF_temp <- data.frame(table(intervalos))

ni <- TDF_temp$Freq

# Frecuencia relativa ajustada a 2 decimales y suma exacta 100
hi <- round(100 * ni / sum(ni), 2)
hi[length(hi)] <- round(100 - sum(hi[-length(hi)]), 2)  # Ajuste último valor

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

# Tabla final
TDF_temp_final <- data.frame(
  Intervalos = TDF_temp$intervalos,
  ni = ni,
  `hi (%)` = hi,
  `Ni asc` = Ni_asc,
  `Ni desc` = Ni_desc,
  `Hi asc (%)` = Hi_asc,
  `Hi desc (%)` = Hi_desc
)

# Fila TOTAL
totales <- data.frame(
  Intervalos = "TOTAL",
  ni = sum(ni),
  `hi (%)` = sum(hi),
  `Ni asc` = "-",
  `Ni desc` = "-",
  `Hi asc (%)` = "-",
  `Hi desc (%)` = "-"
)

TDF_temp_total <- rbind(TDF_temp_final, totales)
# Mostrar tabla con kableExtra
kable(TDF_temp_total, align = 'c',
      caption = "Tabla N°1: Distribución de Frecuencias de Temperatura del Agua") %>%
  kable_styling(full_width = FALSE, position = "center",
                bootstrap_options = c("striped", "hover", "condensed"))
Tabla N°1: Distribución de Frecuencias de Temperatura del Agua
Intervalos ni hi…. Ni.asc Ni.desc Hi.asc…. Hi.desc….
3-8 21 0.70 21 3000 0.7 100
8-13 201 6.70 222 2979 7.4 99.3
13-18 788 26.27 1010 2778 33.67 92.6
18-23 1187 39.57 2197 1990 73.24 66.33
23-28 645 21.50 2842 803 94.74 26.76
28-33 141 4.70 2983 158 99.44 5.26
Faltante 17 0.56 3000 17 100 0.56
TOTAL 3000 100.00
# Mostrar valores mínimo y máximo
cat("Temperatura mínima:", min_temp, "\n")
## Temperatura mínima: 3.39
cat("Temperatura máxima:", max_temp, "\n")
## Temperatura máxima: 36.77
# Diagrama de barras
barplot(TDF_temp_final$ni,
        main = "Gráfica N°1: Distribución por intervalos de temperatura del agua",
        xlab = "Intervalos de temperatura (°C)",
        ylab = "Cantidad",
        col = "skyblue",
        ylim = c(0, max(TDF_temp_final$ni)),
        names.arg = TDF_temp_final$Intervalos,
        las = 2,        # etiquetas verticales
        cex.names = 0.8)