UNIVERSIDAD CENTRAL DEL ECUADOR
ESTUDIO ESTADÍSTICO DE LA CONTAMINACIÓN DEL SUELO Y SU IMPACTO EN LA SALUD
FECHA: 10/1/2025
# ESTADÍSTICA INFERENCIAL
#10/1/2026
#Cargar los Datos
datos<-read.csv("soil_pollution_diseases.csv",header = TRUE,dec = ".",
sep = ",")
#Tipo_Contaminante
Tipo_Contaminante<-datos$Pollutant_Type
# Tabla de distribución de frecuencia
TDF_Tipo_Contaminante<-data.frame(table(Tipo_Contaminante))
ni <- TDF_Tipo_Contaminante$Freq
hi <- round((ni / sum(ni)) * 100, 2)
Tipo_Contaminante <- TDF_Tipo_Contaminante$Tipo_Contaminante
TDF_Tipo_Contaminante <- data.frame(Tipo_Contaminante, ni, hi)
Summary <- data.frame(Tipo_Contaminante = "TOTAL", ni = sum(ni),hi = 100)
TDF_Tipo_Contaminante_Suma<-rbind(TDF_Tipo_Contaminante, Summary)
colnames(TDF_Tipo_Contaminante) <- c("Tipo_Contaminante", "ni", "hi(%)")
# Limpiar espacios en blanco
TDF_Tipo_Contaminante_Suma$Tipo_Contaminante <- trimws(TDF_Tipo_Contaminante_Suma$Tipo_Contaminante)
#Ordenar la tabla en el orden deseado
#El orden determinado es segun la peligrosidad del contaminante
niveles_ordenados <- c("Mercury", "Arsenic", "Lead",
"Cadmium", "Chromium",
"Pesticides", "TOTAL")
TDF_Tipo_Contaminante_Suma$Tipo_Contaminante <- factor(
TDF_Tipo_Contaminante_Suma$Tipo_Contaminante,
levels = niveles_ordenados
)
TDF_Tipo_Contaminante_Suma <- TDF_Tipo_Contaminante_Suma[
order(TDF_Tipo_Contaminante_Suma$Tipo_Contaminante),
]
# TABLA
library(dplyr)
library(gt)
TDF_Tipo_Contaminante_Suma %>%
gt() %>%
tab_header(
title = md("Tabla Nro. 3"),
subtitle = md("*Distribución de frecuencias de los Tipos de contaminantes según su peligrosidad*")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 3")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
table.border.top.style = "solid",
table.border.bottom.style = "solid",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE,
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black"
)
| Tabla Nro. 3 | ||
| Distribución de frecuencias de los Tipos de contaminantes según su peligrosidad | ||
| Tipo_Contaminante | ni | hi |
|---|---|---|
| Mercury | 458 | 15.27 |
| Arsenic | 489 | 16.30 |
| Lead | 529 | 17.63 |
| Cadmium | 516 | 17.20 |
| Chromium | 509 | 16.97 |
| Pesticides | 499 | 16.63 |
| TOTAL | 3000 | 100.00 |
| Autor: Grupo 3 | ||
#Gráfica
barplot(hi, main = "Gráfica N°6: Distribución de frecuencias porcentual
de los Tipos de contaminantes según su peligrosidad",
xlab = "Tipo de Contaminante",
ylab = "Porcentaje",
col = "green",
ylim = c(0,20),
las = 2,
cex.names = 0.6,
names.arg = TDF_Tipo_Contaminante$Tipo_Contaminante)
Tipo_Contaminante <- trimws(datos$Pollutant_Type)
#Orden
niveles_ordenados <- c("Mercury", "Arsenic", "Lead",
"Cadmium", "Chromium", "Pesticides")
#Se realiza la asignacion númerica
Tipo_Contaminante_num <- as.integer(factor(Tipo_Contaminante, levels = niveles_ordenados))
# Tabla de frecuencias
TDF_Tipo_Contaminante <- data.frame(table(Tipo_Contaminante_num))
ni <- TDF_Tipo_Contaminante$Freq
hi <- round((ni / sum(ni)) * 100, 2)
Tipo_Contaminante <- TDF_Tipo_Contaminante$Tipo_Contaminante_num
TDF_Tipo_Contaminante <- data.frame(Tipo_Contaminante, ni, hi)
Summary <- data.frame(Tipo_Contaminante = "TOTAL", ni = sum(ni), hi = 100)
TDF_Tipo_Contaminante_Suma <- rbind(TDF_Tipo_Contaminante, Summary)
colnames(TDF_Tipo_Contaminante_Suma) <- c("Tipo_Contaminante", "ni", "hi")
# Ordenar
TDF_Tipo_Contaminante_Suma$Tipo_Contaminante <- as.character(TDF_Tipo_Contaminante_Suma$Tipo_Contaminante)
TDF_Tipo_Contaminante_Suma <- rbind(
TDF_Tipo_Contaminante_Suma[TDF_Tipo_Contaminante_Suma$Tipo_Contaminante != "TOTAL", ],
TDF_Tipo_Contaminante_Suma[TDF_Tipo_Contaminante_Suma$Tipo_Contaminante == "TOTAL", ]
)
TDF_Tipo_Contaminante_Suma %>%
gt() %>%
tab_header(
title = md("Tabla Nro. 4"),
subtitle = md("*Distribución de frecuencias de los
Tipos de contaminantes según su peligrosidad*")
) %>%
tab_source_note(source_note = md("Autor: Grupo 3")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
table.border.top.style = "solid",
table.border.bottom.style = "solid",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE,
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black"
)
| Tabla Nro. 4 | ||
| Distribución de frecuencias de los Tipos de contaminantes según su peligrosidad | ||
| Tipo_Contaminante | ni | hi |
|---|---|---|
| 1 | 458 | 15.27 |
| 2 | 489 | 16.30 |
| 3 | 529 | 17.63 |
| 4 | 516 | 17.20 |
| 5 | 509 | 16.97 |
| 6 | 499 | 16.63 |
| TOTAL | 3000 | 100.00 |
| Autor: Grupo 3 | ||
TDF_Tipo_Contaminante_Suma <- TDF_Tipo_Contaminante_Suma[
order(as.numeric(TDF_Tipo_Contaminante_Suma$Tipo_Contaminante)),
]
barplot(
TDF_Tipo_Contaminante_Suma$hi[1:6],
names.arg = TDF_Tipo_Contaminante_Suma$Tipo_Contaminante[1:6],
main = "Gráfica N°7: Distribución de frecuencias porcentual de los Tipos de contaminantes según su peligrosidad",
xlab = "Tipo de Contaminante",
ylab = "Porcentaje (%)",
col = "green",
ylim = c(0, 20),
las = 1
)
#Modelo Uniforme
#Asumiendo que todas las categorías de la variable tienen la misma probabilidad de ocurrencia,
#lo que permite comparar esta suposición con la distribución observada de los datos.
#Probabilidades observadas
Fo <- TDF_Tipo_Contaminante_Suma$hi[1:6] / 100
names(Fo) <- TDF_Tipo_Contaminante_Suma$Tipo_Contaminante[1:6] # 1,2,3,4,5,6
#Misma probabilidad para cada categoria
k <- length(Fo)
Fe <- rep(1/k, k)
names(Fe) <- names(Fo)
#Matriz para comparar en gráfica
grafica_matrix <- rbind(
Observado = Fo,
Uniforme = Fe
)
grafica_matrix
## 1 2 3 4 5 6
## Observado 0.1527000 0.1630000 0.1763000 0.1720000 0.1697000 0.1663000
## Uniforme 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
barplot(
grafica_matrix * 100,
beside = TRUE,
main = "Gráfica N°8: Distribución observada vs modelo Uniforme",
xlab = "Tipo de Contaminante",
ylab = "Porcentaje",
ylim = c(0, 20),
las = 1,
cex.names = 0.9,
col = c("purple", "green")
)
legend(
"topright",
legend = rownames(grafica_matrix),
fill = c("purple", "green"),
bty = "n"
)
#TESTS
#Test de Pearson
#Mide el grado de correlación entre la frecuencia observada y la frecuencia esperada
#El coeficiente de correlación de Pearson no pudo ser calculado debido a que el modelo Bernoulli
#asigna probabilidades constantes a las categorías, lo que produce desviación estándar nula en las
#frecuencias esperadas. Por esta razón, el análisis de ajuste se realizó mediante el test de Chi-cuadrado.
#Test Chi-cuadrado
#En el estudio de enfermedad agrupado, el test de Chi-cuadrado se utiliza considerando los grados
#de libertad k-1 y un nivel de significancia previamente fijado. El valor de Chi-cuadrado
#calculado a partir de las frecuencias observadas y esperadas se compara con el valor crítico
#correspondiente.
Fo <- TDF_Tipo_Contaminante_Suma$hi[1:6] / 100
Fo
## [1] 0.1527 0.1630 0.1763 0.1720 0.1697 0.1663
sum(Fo)
## [1] 1
Fe <- rep(1/6, 6)
Fe
## [1] 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
sum(Fe)
## [1] 1
x2 <- sum(((Fo - Fe)^2) / Fe)
x2
## [1] 0.00203456
vc <- qchisq(0.95, df = 5)
vc
## [1] 11.0705
# Decisión
x2 < vc
## [1] TRUE