UNIVERSIDAD CENTRAL DEL ECUADOR
ESTUDIO ESTADÍSTICO DE LA CONTAMINACIÓN DEL SUELO Y SU IMPACTO EN LA SALUD
FECHA: 19/11/2025
# =========================
# ESTADÍSTICA Inferencial
# Fecha: 10/01/2026
# =========================
# -------------------------
# Cargar datos
# -------------------------
setwd("C:/Users/Alexander/Downloads")
datos <- read.csv("soil_pollution_diseases.csv",
sep = ",",
stringsAsFactors = FALSE)
#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
##============##
## CONCLUSION ##
##============##
## La variable Tipo de Contaminante se ajusta satisfactoriamente a un modelo uniforme, asumiendo que cada categoría tiene igual probabilidad de ocurrencia (p = 1/6). El test de chi-cuadrado mostró que no hay diferencias significativas entre las frecuencias observadas y las esperadas (χ² = 0.00203456 < χ² crítico = 11.07), lo que confirma que el modelo representa adecuadamente la distribución de los contaminantes en el estudio. Por lo tanto, se puede usar el modelo uniforme para generar predicciones probabilísticas de la presencia de cada tipo de contaminante.