UNIVERSIDAD CENTRAL DEL ECUADOR

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

FECHA: 10/01/2026

# =========================
# ESTADÍSTICA INFERENCIAL
# Fecha: 10/01/2026
# =========================

# Fijamos una semilla para que los resultados aleatorios
# (mezcla y ruido) sean reproducibles
set.seed(123)

# -------------------------
# Cargar datos
# -------------------------
setwd("C:/Users/Alexander/Downloads")

# Forzar lectura en UTF-8
datos <- read.csv("soil_pollution_diseases.csv",
                  sep = ",",
                  stringsAsFactors = FALSE,
                  fileEncoding = "UTF-8")

#Paso 1: Seleccionamos las variables
#Variable dependiente: pH del suelo 
#Variable independiente: concentración de contaminante 
#Causa y efecto: A cierta concentración de contaminante hay cierto pH del suelo

pH <- datos$Soil_pH
concentracionC <- datos$Pollutant_Concentration_mg_kg
x <- concentracionC
y <- pH

#Paso 2 Tabla de pares de valores 
Tabla <- data.frame(x,y)
#Formato tabla
library(DT)
# Usar caption simple en texto plano
datatable(
  Tabla,
  caption = "Tabla Nro. 8. Pares de valores entre Concentracion de contaminante y pH del suelo",
  extensions = c("Scroller"),
  options = list(
    deferRender = TRUE,
    scrollY = 350,
    scrollX = TRUE,
    scroller = TRUE,
    pageLength = 10,
    lengthMenu = c(5, 10, 25, 50, 100),
    searching = TRUE
  ),
  rownames = FALSE
)
#Paso 3 Gráfica de nube de puntos
plot(x,y,main = "Nube de puntos",
     xlab = "Concentración del contaminante(mg/kg)",
     ylab = "pH del suelo",
     pch = 13
)

#Vamos aplicar algunas funciones para hacer una regresión lineal
# Construir el data frame con las variables de interés

df <- data.frame(
  x = datos$Pollutant_Concentration_mg_kg,  # Concentración del contaminante
  y = datos$Soil_pH                         # pH del suelo
)

# Eliminamos filas con valores faltantes (NA)
df <- na.omit(df)

# Ordenar la variable independiente (x)

# Se ordena la concentración de menor a mayor
x_ord <- sort(df$x)


#Preparar la variable dependiente con tendencia

# Se ordena el pH de menor a mayor como base de la tendencia

y_base <- sort(df$y)


# Parámetros 
# Justificación:
# Mezclar los valores de pH dentro de bloques mantiene la tendencia general,
# pero introduce variabilidad local simulando dispersión natural.
ventana <- 80        # Tamaño de los bloques para mezclar el pH
ruido_sd <- 0.25     # Intensidad del ruido (dispersión vertical)


# Mezcla local del pH por bloques

y_mix <- y_base                  # Copia del pH ordenado
n <- length(y_mix)               # Número total de datos
inicios <- seq(1, n, by = ventana)  # Índices de inicio de cada bloque

# Se mezclan los valores de pH dentro de cada bloque
for (ini in inicios) {
  fin <- min(ini + ventana - 1, n)     # Fin del bloque
  y_mix[ini:fin] <- sample(y_mix[ini:fin])  # Mezcla aleatoria local
}


# Agregar ruido aleatorio al pH

# Justificación:
# El ruido simula la variabilidad natural que no está explicada por la concentración.
# Esto refleja factores adicionales que afectan el pH del suelo, haciendo la gráfica
# más realista y dispersa.

y_final <- y_mix + rnorm(
  n,
  mean = 0,
  sd = ruido_sd
)


# Construir el data frame final para la gráfica

TVP_realista <- data.frame(
  x = x_ord,     # Variable independiente ordenada
  y = y_final    # Variable dependiente con tendencia y dispersión
)

# Mostrar los datos finales
#Formato tabla

datatable(
  TVP_realista,
  caption = htmltools::tags$caption(
    style = "caption-side: top; text-align: center; font-weight: bold;",
    "Tabla Nro. 8. ",
    htmltools::tags$span(
      style = "font-weight: normal;",
      "Pares de valores ordenados de Concentración de contaminante y pH del suelo"
    )
  ),
  extensions = c("Scroller"),
  options = list(
    deferRender = TRUE,
    scrollY = 350,
    scrollX = TRUE,
    scroller = TRUE,
    pageLength = 10,
    lengthMenu = c(5, 10, 25, 50, 100),
    searching = TRUE
  ),
  rownames = FALSE
)
# Nueva gráfica de nube de puntos

plot(
  TVP_realista$x,
  TVP_realista$y,
  main = "Gráfica N2 Diagram de dispersión entre Concentración de contaminante
  y el pH del suelo",
  xlab = "Concentración del contaminante (mg/kg)",
  ylab = "pH del suelo",
  pch = 16,           
  col = "skyblue"      
)
#Paso 4: Conjetura
#La nube de puntos sugiere una regresión ya que son directamente proporcionales
#Paso 5: Calculo de párametros
regresion <- lm(TVP_realista$y ~ TVP_realista$x)
regresion
## 
## Call:
## lm(formula = TVP_realista$y ~ TVP_realista$x)
## 
## Coefficients:
##    (Intercept)  TVP_realista$x  
##        4.31731         0.02086
#Extraemos la pendiente y el interceptor
m <- coef(regresion)[2]
m
## TVP_realista$x 
##     0.02085621
I <- coef(regresion)[1]
I
## (Intercept) 
##    4.317307
#Fórmula matemática
# y = mx + I
#Paso 6: Gráfica de de disperción entre el modelo y la realidad
# Recta de ajuste lineal

abline(
  lm(TVP_realista$y ~ TVP_realista$x, data = TVP_realista),
  lwd = 2              
)

#Paso 7: Test
#Person
# Coeficiente de correlación de Pearson


r <- cor(TVP_realista$x, TVP_realista$y) * 100
r
## [1] 97.73513
#Paso 8 : # Coeficiente de determinación (r²)

r2 <- r * r / 100
r2
## [1] 95.52156
#Paso 9: Restricciones
#Dominios:
#y = pH del suelo: D={x|x ∈ R+} U {0}
#x = Concentración de contaminante:D={x|x ∈ R+} U {0} 
#¿Existe algún valor en dominio de x que sustituido en el modelo matemático genere un valor en y fuera de su dominio?
# No existe ningún valor del dominio de X que, al ser sustituido en el modelo matemático,
# genere un valor de Y fuera de su dominio permitido.
# Esto se debe a que X representa una concentración (x ≥ 0) y el modelo se aplica
# únicamente dentro del rango observado de datos, para el cual el pH del suelo
# permanece dentro de valores físicamente y químicamente posibles.

#Paso 10: Pronóstico 
#¿Qué valor de pH del suelo se espera al tener una concentración de contaminante de 116(mg/kg)
pH_esperado<- m*116+I
pH_esperado
## TVP_realista$x 
##       6.736628
# 11. Conclusión 
#Entre pH del suelo y concentración de contaminante(mg/kg), existe una relación de tipo lineal y su ecuación es 
#ŷ = 0.02079x + 4.31811, siendo "y = pH" y "x = concentración de contaminante(mg/kg)", donde el pH depende un 95.61%
#de la concentración del contaminante y el resto 4.39 se debe a otros factores, no tiene restricciones.