UNIVERSIDAD CENTRAL DEL ECUADOR

ESTUDIO ESTADÍSTICO DE LA CONTAMINACIÓN DEL SUELO Y SU IMPACTO EN LA SALUD

FECHA: 24/1/2026

setwd("C:/Users/arian/OneDrive/Escritorio/3 SEMESTRE/ESTADISTICA Y PROBABILIDAD")

soil_pollution_diseases <- read.csv(
  "soil_pollution_diseases.csv",
  header = TRUE,
  sep = ",",
  dec = "."
)

#PASO 1: DEFINIR LA VARIABLE DE INTERÉS
# La variable Año es una variable discreta porque su dominio está formado por valores enteros contables, es decir,

#D={x|x ∈ Z+}

#No puede tomar valores fraccionarios entre dos años consecutivos, ya que el tiempo se registra en unidades completas de año.

#PASO 2: TABLA DE DISTRIBUCIÓN DE FRECUENCIAS (AÑO)

# Extraer los datos
df <- soil_pollution_diseases

# Convertir Date_Reported a tipo Date (YYYY-MM-DD)
df$Date_Reported <- as.Date(df$Date_Reported)

# Crear columnas Día, Mes y Año
df$Day   <- as.integer(format(df$Date_Reported, "%d"))
df$Month <- as.integer(format(df$Date_Reported, "%m"))
df$Year  <- as.integer(format(df$Date_Reported, "%Y"))

# Variable de interés (Año) sin NA
Año <- na.omit(df$Year)

# Tabla de frecuencias
TDF_Año <- table(Año)

# Crear tabla con columnas bien nombradas
Tabla_Año_final <- data.frame(
  Año = as.integer(names(TDF_Año)),
  ni  = as.integer(TDF_Año),
  hi  = round(100 * as.integer(TDF_Año) / sum(TDF_Año), 2),
  stringsAsFactors = FALSE
)

# Fila Total (mismo nombre de columnas)
totales <- data.frame(
  Año = "Total",
  ni  = sum(Tabla_Año_final$ni),
  hi  = round(sum(Tabla_Año_final$hi), 2),
  stringsAsFactors = FALSE
)

ni <- Tabla_Año_final$ni
hi <- Tabla_Año_final$hi

# Unir tabla + total (ya no da error)
TDF_Año_total <- rbind(Tabla_Año_final, totales)

# TABLA 
library(gt)
library(dplyr)

TDF_Año_total%>%
  gt() %>%
  tab_header(
    title = md("*Tabla Nro. 1*"),
    subtitle = md("**Tabla de distribución de frecuencias del año de estudio**")
  ) %>%
  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. 1
Tabla de distribución de frecuencias del año de estudio
Año ni hi
2023 1116 37.2
2024 1497 49.9
2025 387 12.9
Total 3000 100.0
Autor: Grupo 3
#PASO 3: DIAGRAMA DE BARRAS

# Gráfico de barras - Porcentaje global por Año
barplot(hi,
        main = "Gráfica N°2: Distribución porcentual de los años en los 
        que se realizó el estudio de contaminación del suelo",
        xlab = "Año",
        ylab = "Porcentaje",
        col = "lightgreen",
        ylim = c(0, 100),          
        names.arg = Tabla_Año_final$Año, 
        las = 2,
        cex.names = 0.8)

#PASO 4: MAPEO

Año_map <- ifelse(Año == 2023, 1,
                  ifelse(Año == 2024, 2,
                         ifelse(Año == 2025, 3, NA)))

Año_map <- na.omit(Año_map)

# Tabla de frecuencias del año mapeado
TDF_Año_map <- table(Año_map)

# Crear tabla con columnas bien nombradas
Tabla_Año_map_final <- data.frame(
  Año = as.integer(names(TDF_Año_map)),        # aquí ya salen 1,2,3
  ni  = as.integer(TDF_Año_map),
  hi  = round(100 * as.integer(TDF_Año_map) / sum(TDF_Año_map), 2),
  stringsAsFactors = FALSE
)

# Fila Total
totales <- data.frame(
  Año = "Total",
  ni  = sum(Tabla_Año_map_final$ni),
  hi  = round(sum(Tabla_Año_map_final$hi), 2),
  stringsAsFactors = FALSE
)

TDF_Año_map_total <- rbind(Tabla_Año_map_final, totales)

library(gt)
library(dplyr)

TDF_Año_map_total %>%
  gt() %>%
  tab_header(
    title = md("Tabla Nro. 1"),
    subtitle = md("Tabla de distribución de frecuencias del año de estudio (mapeado)")
  ) %>%
  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. 1
Tabla de distribución de frecuencias del año de estudio (mapeado)
Año ni hi
1 1116 37.2
2 1497 49.9
3 387 12.9
Total 3000 100.0
Autor: Grupo 3
#PASO 5: DIAGRAMA DE BARRAS (AÑO MAPEADO) 

barplot(Tabla_Año_map_final$hi,
        main = "Gráfica N°2: Distribución porcentual de los años (mapeados) del estudio",
        xlab = "Año (mapeado: 2023=1, 2024=2, 2025=3)",
        ylab = "Porcentaje",
        col = "lightgreen",
        ylim = c(0, 100),
        names.arg = Tabla_Año_map_final$Año,
        las = 2,
        cex.names = 0.8)

#PASO 6: CONJETURA DE MODELO

#Mi variable discreta año y sus barras se comportan como el modelo matemático Binomial

#PASO 7: CALCULO DE PARAMETROS PARA MODELO BINOMIAL

x <- Tabla_Año_map_final$ni[
  Tabla_Año_map_final$Año >= 1 &
    Tabla_Año_map_final$Año <= 3
]

clases <- 1:3

hi_1_3 <- x / sum(x)

X <- 0:(length(x) - 1)

media_observada <- sum(X * x) / sum(x)

p <- media_observada / (length(x) - 1)

P_binomial <- dbinom(X, size = length(x) - 1, prob = p)

#PASO 8: DIAGRAMA COMPARATIVO ENTRE LA REALIDAD Y EL MODELO BINOMIAL

barplot(
  rbind(hi_1_3, P_binomial),
  beside = TRUE,
  col = c("lightgreen", "blue"),
  names.arg = clases,
  main = "Grafica N°3: Modelo de probabilidad binomial de los años de estudio ",
  ylab = "Cantidad - Probabilidad",
  xlab = "Año mapeado"
)

legend(
  "topright",
  legend = c("Real", "Modelo"),
  fill = c("lightgreen", "blue"),
  cex = 0.8
)

#PASO 9: APLICACIÓN DE TEST DE PEARSON Y CHI SQUARED

# TEST DE PEARSON

Fo <- hi_1_3
Fe <- P_binomial

Correlacion_Pearson <- cor(Fo, Fe) * 100
Correlacion_Pearson
## [1] 99.5576
# GRÁFICA DE CORRELACIÓN (PEARSON)

plot(
  hi_1_3,
  P_binomial,
  main = "Gráfica N°12: Correlación de frecuencias en el modelo Binomial (Año mapeado)",
  xlab = "Frecuencia observada",
  ylab = "Frecuencia esperada (Modelo binomial)",
  pch = 18,
  col = "darkblue"
)

abline(
  lm(P_binomial ~ hi_1_3),
  col = "red",
  lwd = 2
)

# TEST DE CHI-CUADRADO

Fo <- hi_1_3
Fe <- P_binomial

x2 <- sum(((Fo - Fe)^2) / Fe)
x2
## [1] 0.003675886
vc <- qchisq(0.95, length(Fo) - 1)
vc
## [1] 5.991465
x2 < vc
## [1] TRUE
#PASO 10: CALCULO DE PROBABILIDADES 

#¿Cuál es la probabilidad de que un registro seleccionado al azar corresponda al año 2025?

dbinom(2, size = length(x) - 1, prob = p)
## [1] 0.1432623
#PASO 11: CONCLUSIONES

#LA VARIABLE AÑO SE EXPLICA A TRAVEZ DEL MODELO BINOMIAL APROBANDO LOS TEST DE PEARSON Y CHI CUADRADO.
#DE ESTA MANERA PODEMOS CALCULAR PROBABILIDADES COMO POR EJEMPLO CUÁL ES LA PROBABILIDAD DE QUE UN REGRITO SELECCIONADO CORRESPONDA AL AÑO 2025