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