#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 = ".")
3. Tabla de distribución de frecuencia
#Manualmente
min <-min(MP_Cadmio)
max <-max(MP_Cadmio)
R <-max-min
K <- floor(1+3.33*log10(length(MP_Cadmio)))
A <-R/K
Li <-round(seq(from=min,to=max-A,by=A),2)
Li[1] <- min(MP_Cadmio)
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(MP_Cadmio >= Li[i] & MP_Cadmio < Ls[i])
} else {
ni[i] <- sum(MP_Cadmio >= Li[i] & MP_Cadmio <= Ls[i])
}
}
sum(ni)
## [1] 2979
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)))
TDFMP_Cadmio <- data.frame(
Li, Ls, Mc, ni, round(hi, 2), Ni_asc, Ni_desc, round(Hi_asc, 2), round(Hi_desc, 2)
)
colnames(TDFMP_Cadmio)<- c("Li","Ls","Mc","ni","hi","Ni_asc(%)","Ni_desc(%)","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="-")
TDFMP_Cadmio<-rbind(TDFMP_Cadmio,totales)
#Simplificación con el histograma
Hist_MP_Cadmio<-hist(MP_Cadmio,breaks = 8,plot = F)
k<-length(Hist_MP_Cadmio$breaks)
Li<-Hist_MP_Cadmio$breaks[1:(length(Hist_MP_Cadmio$breaks)-1)]
Ls<-Hist_MP_Cadmio$breaks[2:length(Hist_MP_Cadmio$breaks)]
ni<-Hist_MP_Cadmio$counts
sum(ni)
## [1] 2979
Mc<-Hist_MP_Cadmio$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)))
TDFMP_Cadmio<-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(TDFMP_Cadmio)<-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="-")
TDFMP_Cadmio_total<-rbind(TDFMP_Cadmio,totales)
library(knitr)
library(kableExtra)
kable(TDFMP_Cadmio_total, align = 'c', caption = "Tabla de Frecuencias de metales pesados
de Cadmio 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 metales pesados de Cadmio de 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
|
0.2
|
0.1
|
193
|
6.48
|
193
|
2979
|
6.48
|
100
|
|
0.2
|
0.4
|
0.3
|
719
|
24.14
|
912
|
2786
|
30.61
|
93.52
|
|
0.4
|
0.6
|
0.5
|
1190
|
39.95
|
2102
|
2067
|
70.56
|
69.39
|
|
0.6
|
0.8
|
0.7
|
699
|
23.46
|
2801
|
877
|
94.02
|
29.44
|
|
0.8
|
1
|
0.9
|
163
|
5.47
|
2964
|
178
|
99.5
|
5.98
|
|
1
|
1.2
|
1.1
|
14
|
0.47
|
2978
|
15
|
99.97
|
0.5
|
|
1.2
|
1.4
|
1.3
|
1
|
0.03
|
2979
|
1
|
100
|
0.03
|
|
TOTAL
|
|
|
2979
|
100
|
|
|
|
|
4. Gráficas
4.1 Histograma
#Histograma
hist(MP_Cadmio,breaks = 10,
main = "Gráfica N°1: Distribución de la cantidad de metales pesados
de Cadmio de estudio de contaminación del agua
en China en el año 2023",
xlab = " Metales Pesados - Cadmio (ug/L) ",
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_MP_Cadmio$breaks,labels = Hist_MP_Cadmio$breaks,las=1,
cex.axis=0.9)

4.2 Histograma Globlal
# Gráfico
hist(MP_Cadmio, breaks = 10,
main = "Gráfica N°2: Distribución de la cantidad de metales pesados
de cadmio en el estudio de contaminación
del agua en China 2023",
xlab = "Metales Pesados Cadmio (µg/L)",
ylab = "Cantidad",
ylim = c(0, 2979),
col = "pink",
cex.main = 1.3,
cex.lab = 1,
cex.axis = 0.9,
xaxt = "n",
yaxt = "n")
# Forzar marcas del eje Y incluyendo 2979
ticks_y <- c(seq(0, 2500, by = 500), 2979)
# Eje X
axis(1,
at = Hist_MP_Cadmio$breaks,
labels = round(Hist_MP_Cadmio$breaks, 2),
las = 1,
cex.axis = 0.9)
axis(2, at = ticks_y,
labels = ticks_y,
las = 1,
cex.axis = 0.9)

4.3 Histograma Porcentual Global
barplot(
height = TDFMP_Cadmio$hi,
space = 0,
col = "skyblue",
main = "Gráfica N°3: Distribución porcentual de metales pesados de Cadmio
de estudio de contaminación del agua en China en el año 2023",
xlab = "Metales Pesados - Cadmio (ug/L)",
ylab = "Porcentaje (%)",
names.arg = TDFMP_Cadmio$MC,
ylim = c(0, 100)
)

4.4 Histograma Local
# Local
hist(MP_Cadmio, breaks = 10,
main ="Gráfica N°4:Distribución porcentual de metales pesados
de cadmio de estudio de contaminación del agua
en China en el año 2023",
xlab = "Metales Pesados - Cadmio (ug/L)",
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_MP_Cadmio$breaks,
labels = Hist_MP_Cadmio$breaks, las = 1,
cex.axis = 0.9)

4.5 Histograma Porcentual Local
barplot(
height = TDFMP_Cadmio$hi,
space = 0,
col = "skyblue",
main = "Gráfica N°5: Distribución porcentual de metales pesados de cadmio
de estudio de contaminación del agua en China en el año 2023",
xlab = "Metales Pesados - Cadmio (ug/L)",
ylab = "Porcentaje (%)",
names.arg = TDFMP_Cadmio$MC,
ylim = c(0, 40)
)

5. Diagrama de Caja
boxplot(MP_Cadmio,
horizontal = TRUE,
main = "Gráfica N°6:Distribución de frecuencia de metales pesados de
cadmio de estudio de contaminación del agua
en China en el año 2023 ",
xlab = "Metales Pesados -Cadmio (Ug/L) ",
col = "purple",
outline = TRUE,
pch = 1)

summary(MP_Cadmio)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.3700 0.5000 0.5046 0.6300 1.3000
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 metales pesados de cadmio en el estudio
de contaminación del agua en China, 2023",
xlab = "Metales Pesados – Cadmio (µg/L)",
ylab = "Cantidad",
xlim = c(min(Li), max(Ls)),
ylim = c(0, 2979),
col = "orange",
type = "o",
lwd = 3,
las = 1,
xaxt = "n",
yaxt = "n",
cex.axis = 0.8)
lines(Ls, Ni_desc,
col = "green",
type = "o",
lwd = 3)
# Eje X
axis(1, at = Li, las = 1)
# Eje Y completo hasta 2979
axis(2,
at = c(seq(0, 2500, by = 500), 2979),
labels = c(seq(0, 2500, by = 500), 2979),
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 metales pesados de cadmio
de contaminación del agua en China en el año 2023",
xlab = "Metales Pesados - Cadmio (ug/L)",
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(MP_Cadmio), 2)
media
## [1] 0.5
# Moda
max_ni <- max(TDFMP_Cadmio$ni)
moda <- TDFMP_Cadmio$MC[TDFMP_Cadmio$ni == max_ni]
moda
## [1] 0.5
# Mediana
mediana <- median(MP_Cadmio)
mediana
## [1] 0.5
7.2 Indicadores de Dispersión
# Varianza
varianza <- var(MP_Cadmio)
varianza
## [1] 0.03704278
# Desviación Estándar
sd <- sd(MP_Cadmio)
sd
## [1] 0.192465
# Coeficiente de Variación
cv <- round((sd / media) * 100, 2)
cv
## [1] 38.49
8. Tabla Resumen
tabla_indicadores <- data.frame("Variable" =c("Metales Pesados -Cd (ug/L)"),
"Rango" = c("[0;1.3]"),
"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" = "[1.0;1.3]")
library(knitr)
kable(tabla_indicadores, align = 'c', caption = "Conclusiones de la variable
Metales Pesados -Cd (ug/L)")
Conclusiones de la variable Metales Pesados -Cd
(ug/L)
| Metales Pesados -Cd (ug/L) |
[0;1.3] |
0.5 |
0.5 |
0.5 |
0.04 |
0.19 |
38.49 |
0.08 |
-0.13 |
[1.0;1.3] |
9. Conclusión