UNIVERSIDAD CENTRAL DEL ECUADOR

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

FECHA: 24/01/2026

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

# =========================
# Cargar datos desde el archivo CSV
# =========================
datos <- read.csv(
  "C:\\Users\\Usuario\\Downloads\\soil_pollution_diseases.csv",
  header = TRUE,      
  sep = ","           
)

# =========================
# 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)

# =========================
# Paso 1: Ordenar la variable independiente (x)
# =========================
x_ord <- sort(df$x)

# =========================
# Paso 2: Preparar la variable dependiente con tendencia
# =========================
y_base <- sort(df$y)

# =========================
# Parámetros para evitar una relación perfecta
# =========================
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
n <- length(y_mix)
inicios <- seq(1, n, by = ventana)

for (ini in inicios) {
  fin <- min(ini + ventana - 1, n)
  y_mix[ini:fin] <- sample(y_mix[ini:fin])
}

# =========================
# Agregar ruido aleatorio al pH
# =========================
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,
  y = y_final
)

# =========================
# Gráfica de nube de puntos
# =========================
plot(
  TVP_realista$x,
  TVP_realista$y,
  main = "Nube de puntos con tendencia (realista)",
  xlab = "Concentración del contaminante (mg/kg)",
  ylab = "pH del suelo",
  pch = 16,
  col = "skyblue"
)

# =========================
# Recta de ajuste lineal (visual)
# =========================
abline(lm(y ~ x, data = TVP_realista), lwd = 2)

# =========================
# Coeficiente de correlación de Pearson
# =========================
r <- cor(TVP_realista$x, TVP_realista$y) * 100
r
## [1] 97.73513
# =========================
# Coeficiente de determinación (R²)
# =========================
r2 <- r * r / 100
r2
## [1] 95.52156