ESTUDIO ESTADÍSTICO DE LA CONTAMINACIÓN DEL SUELO Y SU IMPACTO EN LA SALUD FECHA: 24/01/2026

#Estadística inferencial
library(readr)
#PASO 1: DEFINIR LA VARIABLE DE INTERÉS

#La variable Materia Orgánica suelo es una variable cuantitativa continua, ya que su dominio está formado por valores reales positivos, es decir:
#D={x|x ∈ R+}
#Esta variable puede tomar infinitos valores dentro de un intervalo, por ejemplo entre 0 y 10 %.

#PASO 2: TABLA DE DISTRIBUCIÓN DE FRECUENCIAS 

#Extracción Variable Cuantitativa Continua
datos <- read_csv("C:/Users/arian/OneDrive/Escritorio/3 SEMESTRE/ESTADISTICA Y PROBABILIDAD/soil_pollution_diseases1.csv")

MO <- datos$Materia_Organica_pct

# Histograma

k <- 1 + (3.3 * log10(3000))
k <- floor(k)
min <- min(MO)
max <- max(MO)
R <- max - min
A <- R / k

histoP <- hist(
  MO,
  main = "Gráfica Nº1: Distribución de la Materia Orgánica suelo",
  xlab = "pH",
  ylab = "Cantidad",
  col = "blue"
)

#Tabla simplificada basada en el histograma

Limites <- histoP$breaks
LimInf <- Limites[1:(length(Limites) - 1)]
LimSup <- Limites[2:length(Limites)]
Mc <- histoP$mids
ni <- histoP$counts
sum(ni)
## [1] 3000
hi <- round(ni / sum(ni) * 100, 2)
sum(hi)
## [1] 100
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- round(cumsum(hi), 2)
Hi_dsc <- round(rev(cumsum(rev(hi))), 2)

TDF_MO<- data.frame(LimInf, LimSup, Mc, ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)

totalni <- sum(ni)
totalhi <- 100

TDF_MO_completo <- rbind(
  TDF_MO,
  data.frame(LimInf = "Total",
             LimSup = " ", Mc = " ", ni = totalni,
             hi = totalhi, Ni_asc = " ", Ni_dsc = " ",
             Hi_asc = " ", Hi_dsc = " ")
)

library(dplyr)
library(gt)

tabla_Histo <- TDF_MO_completo %>%
  gt() %>%
  tab_header(
    title = md("Tabla Nº1"),
    subtitle = md("*Tabla simplificada de la Materia Orgánica suelo*")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 3")
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.bottom.style = "solid",
    column_labels.border.bottom.width = px(2),
    row.striping.include_table_body = TRUE
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(
      rows = LimInf == "Total"
    )
  )

tabla_Histo
Tabla Nº1
Tabla simplificada de la Materia Orgánica suelo
LimInf LimSup Mc ni hi Ni_asc Ni_dsc Hi_asc Hi_dsc
0 1 0.5 27 0.90 27 3000 0.9 100
1 2 1.5 437 14.57 464 2973 15.47 99.1
2 3 2.5 793 26.43 1257 2536 41.9 84.53
3 4 3.5 663 22.10 1920 1743 64 58.1
4 5 4.5 419 13.97 2339 1080 77.97 36
5 6 5.5 269 8.97 2608 661 86.94 22.03
6 7 6.5 182 6.07 2790 392 93.01 13.06
7 8 7.5 85 2.83 2875 210 95.84 6.99
8 9 8.5 37 1.23 2912 125 97.07 4.16
9 10 9.5 88 2.93 3000 88 100 2.93
Total 3000 100.00
Autor: Grupo 3
#PASO 3: HISTOGRAMA

hist(
  MO,
  breaks = seq(min, max, A),
  main = "Gráfica Nº2: Distribución de la Materia Orgánica suelo",
  xlab = "Materia Orgánica del suelo (%)",
  ylab = "Porcentaje",
  col = "#4A90E2"
)

#Paso 4. CONJETURA
#Al analizar el histograma de la Materia Orgánica del suelo (%), 
#se observa que la mayor frecuencia de datos se concentra en valores 
#bajos y la cola de la distribución se extiende hacia la izquierda, 
#Esta asimetría positiva sugiere que los datos podrían aproximarse a un modelo log-normal.

#Paso 5. CÁLCULO DE PARÁMETROS DISTRIBUCIÓN LOG-NORMAL
min(MO)
## [1] 0.68
log_MO <- log(MO)
mulog <- mean(log_MO)
sigmalog <- sd(log_MO)

mulog
## [1] 1.207941
sigmalog
## [1] 0.5004109
# Definir breaks (intervalos) a partir del histograma ya calculado
breaks <- histoP$breaks
breaks
##  [1]  0  1  2  3  4  5  6  7  8  9 10
#Paso 6. HISTOGRAMA DENSIDAD DE PROBABILIDAD 
Histograma_MO <- hist(
  MO,
  breaks = breaks,
  col = "salmon",
  freq = FALSE,
  main = "Gráfica N°3: Comparación de la Realidad y el Modelo Log-normal de la Materia Orgánica del suelo en el estudio de la contaminación del suelo y su impacto en la salud",
  xlab = "Materia Orgánica del suelo (%)",
  ylab = "Densidad de probabilidad",
  cex.main = 0.9,
  ylim = c(0, max(hist(MO, breaks = breaks, plot = FALSE, freq = FALSE)$density, na.rm = TRUE) * 1.2),
  xaxt = "n"
)

axis(1, at = breaks)

x <- seq(min(MO, na.rm = TRUE), max(MO, na.rm = TRUE), by = 0.001)

curve(
  dlnorm(x, meanlog = mulog, sdlog = sigmalog),
  col = "darkblue",
  lwd = 3,
  add = TRUE
)

#Paso 7. TESTS

# Test de Pearson
fo <- hist(MO, breaks = breaks, plot = FALSE)$counts
fo
##  [1]  27 437 793 663 419 269 182  85  37  88
n <- length(MO)

fe <- numeric(length(fo))  # vector vacío para frecuencias esperadas

for(i in 1:length(fo)){
  fe[i] <- n * (plnorm(breaks[i + 1], meanlog = mulog, sdlog = sigmalog) -
                  plnorm(breaks[i],     meanlog = mulog, sdlog = sigmalog))
}
fe
##  [1]  23.67429 431.72688 785.18396 677.11882 448.75678 268.52873 154.58136
##  [8]  88.05358  50.30341  29.01209
# Correlación de Pearson (%)
Correlación <- cor(fo, fe) * 100
Correlación
## [1] 99.64035
# Test de Chi-cuadrado

# Frecuencias relativas esperadas
fe_frac <- fe / n
fe_frac
##  [1] 0.007891431 0.143908961 0.261727985 0.225706274 0.149585593 0.089509576
##  [7] 0.051527121 0.029351192 0.016767804 0.009670696
# Frecuencias relativas observadas
fo_frac <- fo / n
fo_frac
##  [1] 0.00900000 0.14566667 0.26433333 0.22100000 0.13966667 0.08966667
##  [7] 0.06066667 0.02833333 0.01233333 0.02933333
# Estadístico Chi-cuadrado
x2 <- sum((fo_frac - fe_frac)^2 / fe_frac)
x2
## [1] 0.04376686
# Grados de libertad
# k = número de intervalos
# Se restan 2 parámetros estimados (mulog y sigmalog)
k <- length(fo_frac)
gl <- k - 1 
gl
## [1] 9
# Umbral de aceptación
umbral_aceptacion <- qchisq(0.9999999999, df = gl)
umbral_aceptacion
## [1] 65.81779
x2 < umbral_aceptacion
## [1] TRUE
# 9. CÁLCULO DE PROBABILIDAD (ACTUAL)

# ¿Cuál es la probabilidad de que la Materia Orgánica del suelo
# se encuentre entre 3% y 4%?

prob_actual <- plnorm(4, meanlog = mulog, sdlog = sigmalog) -
  plnorm(3, meanlog = mulog, sdlog = sigmalog)

prob_actual
## [1] 0.2257063
prob_actual * 100
## [1] 22.57063
# ¿Cuál es la probabilidad de que la Materia Orgánica del suelo
# no supere el 4%?

plnorm(4, meanlog = mulog, sdlog = sigmalog)
## [1] 0.6392347
#Paso 10. INTERVALO DE CONFIANZA PARA LA MEDIA DE LA MATERIA ORGÁNICA 

media <- mean(MO)
sigma <- sd(MO)
n <- length(MO)
sigma
## [1] 1.939203
error <- 2 * (sigma / sqrt(n))

# Límites del intervalo de confianza (95%)
limite_inferior <- round(media - error, 2)
limite_superior <- round(media + error, 2)

tabla_intervalo <- data.frame(
  Intervalo = paste0("P [", limite_inferior, " < µ < ", limite_superior, "] = 95%")
)

library(gt)
library(dplyr)

tabla_intervalo %>%
  gt() %>%
  tab_header(
    title = md("*Tabla Nro. 2*"),
    subtitle = md("**Intervalo de confianza de la Materia Orgánica del suelo en el estudio de la contaminación del suelo y su impacto en la salud**")
  ) %>%
  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. 2
Intervalo de confianza de la Materia Orgánica del suelo en el estudio de la contaminación del suelo y su impacto en la salud
Intervalo
P [3.72 < µ < 3.86] = 95%
Autor: Grupo 3
#Paso 11. CONCLUSIÓN 
# La variable  Materia Orgánica suelo sigue o se explica con un modelo log-normal con parametros µ = 1.207 y σ = 0.500 
#y podemos afirmar con 95% de confianza que la media aritmética de está variable se encuentra entre 3.72 y 3.86 % 
#con una desviasión estándar de 1.93 %.