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 Precipitación 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 400 mm.

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

Precipitación <- datos$Precipitacion_mm

# Histograma

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

histoP <- hist(
  Precipitación,
  main = "Gráfica Nº5: Distribución de la temperatura de 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_Histo_Precipitación <- data.frame(LimInf, LimSup, Mc, ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)

totalni <- sum(ni)
totalhi <- 100

TDF_Histo_Precipitación_completo <- rbind(
  TDF_Histo_Precipitación,
  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_Histo_Precipitación_completo %>%
  gt() %>%
  tab_header(
    title = md("Tabla Nº1"),
    subtitle = md("*Tabla simplificada de distribución de la Precipitación*")
  ) %>%
  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 distribución de la Precipitación
LimInf LimSup Mc ni hi Ni_asc Ni_dsc Hi_asc Hi_dsc
0 50 25 1359 45.30 1359 3000 45.3 100
50 100 75 745 24.83 2104 1641 70.13 54.7
100 150 125 410 13.67 2514 896 83.8 29.87
150 200 175 221 7.37 2735 486 91.17 16.2
200 250 225 124 4.13 2859 265 95.3 8.83
250 300 275 59 1.97 2918 141 97.27 4.7
300 350 325 37 1.23 2955 82 98.5 2.73
350 400 375 45 1.50 3000 45 100 1.5
Total 3000 100.00
Autor: Grupo 3
#PASO 3: HISTOGRAMA

hist(
  Precipitación,
  breaks = seq(min, max, A),
  main = "Gráfica Nº1: Distribución de la Precipitación",
  xlab = "pH",
  ylab = "Porcentaje",
  col = "#4A90E2"
)

#Paso 4. CONJETURA: Observando el histograma de la variable precipitación (mm), se puede notar que las barras presentan una alta frecuencia de valores bajos y van decreciendo rápidamente a medida que aumenta la precipitación. Esta forma característica, con un declive continuo hacia la derecha, sugiere que la variable podría seguir un modelo de distribución exponencial.

#Paso 5. CÁLCULO DE PARÁMETROS DISTRIBUCIÓN EXPONELCIAL
# Media 
media_exp <- mean(Precipitación)
media_exp
## [1] 82.43867
# Lambda
lambda <- 1 / media_exp
lambda
## [1] 0.01213023
# Definimos los breaks (clases) usando el histograma que ya calculaste
breaks <- histoP$breaks
breaks
## [1]   0  50 100 150 200 250 300 350 400
#Paso 6. HISTOGRAMA densidad de probabilidad
Histograma_precipitación <- hist(
  Precipitación,
  breaks = breaks,
  freq = FALSE,
  main = "Gráfica Nº2: Comparación modelo exponelcial con la realidad de la precipitación",
  xlab = "Precipitación (mm)",
  ylab = "Densidad probabilidad",
  col = "lightblue",
  ylim = c(0, max(hist(Precipitación, breaks = breaks, plot = FALSE, freq = FALSE)$density, na.rm = TRUE) * 1.2),
  xaxt = "n"
)

axis(1, at = breaks)

# Curva exponencial
curve(
  dexp(x, rate = lambda),
  from = 0, to = max(Precipitación, na.rm = TRUE),
  col = "orange", lwd = 2, add = TRUE
)

#PASO 7: APLICACIÓN DE TESTS

#TEST DE PEARSON
# Frecuencia simple observada
Fo <- histoP$counts
Fo
## [1] 1359  745  410  221  124   59   37   45
#Número de intervalos
h <- length(Fo)
h
## [1] 8
#Probabilidades teóricas por intervalo
P <- c(0)
for (i in 1:h) {
  P[i] <- (pexp(histoP$breaks[i + 1], rate = lambda) -
             pexp(histoP$breaks[i],     rate = lambda))
}
P
## [1] 0.454750345 0.247952469 0.135195998 0.073715571 0.040193390 0.021915432
## [7] 0.011949382 0.006515396
#Frecuencia esperada
Fe <- P * length(Precipitación)
Fe
## [1] 1364.25104  743.85741  405.58799  221.14671  120.58017   65.74630   35.84814
## [8]   19.54619
# Correlación de Pearson (%)
Correlación <- cor(Fo, Fe) * 100
Correlación
## [1] 99.98086
#TEST CHI CUADRADO

grados_libertad <- h - 1
grados_libertad
## [1] 7
nivel_significancia <- 0.05

n  <- length(Precipitación)

Fo <- (histoP$counts / n) * 100
Fo
## [1] 45.300000 24.833333 13.666667  7.366667  4.133333  1.966667  1.233333
## [8]  1.500000
Fe <- P * 100
Fe
## [1] 45.4750345 24.7952469 13.5195998  7.3715571  4.0193390  2.1915432  1.1949382
## [8]  0.6515396
x2 <- sum((Fe - Fo)^2 / Fe)
x2
## [1] 1.134775
umbral_aceptacion <- qchisq(1 - nivel_significancia, grados_libertad)
umbral_aceptacion
## [1] 14.06714
x2 < umbral_aceptacion
## [1] TRUE
#PASO 7: CÁLCULO DE PROBABILIDADES (MODELO EXPONENCIAL)

# ¿Qué porcentaje de nuevas muestras tendrá precipitación entre 50 y 100 mm?
prob1 <- pexp(100, rate = lambda) - pexp(50, rate = lambda)
prob1 * 100
## [1] 24.79525
# ¿Qué porcentaje de nuevas muestras tendrá precipitación mayor a 150 mm?
prob2 <- 1 - pexp(150, rate = lambda)
prob2 * 100
## [1] 16.21012
# Si se toman 50 muestras, ¿cuántas se espera que tengan precipitación entre 40 y 80 mm?
n_muestra <- 50
prob3 <- pexp(80, rate = lambda) - pexp(40, rate = lambda)

esperadas <- prob3 * n_muestra
esperadas
## [1] 11.8322
#PASO 8: INTERVALO DE CONFIANZA PARA LA MEDIA DE LA PRECIPITACIÓN

media <- mean(Precipitación)
sigma <- sd(Precipitación)
n <- length(Precipitación)
sigma
## [1] 79.97984
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 las precipitaciones en el estudio del clima en el volcán Antisana en 2012**")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 2")
  ) %>%
  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 las precipitaciones en el estudio del clima en el volcán Antisana en 2012
Intervalo
P [79.52 < µ < 85.36] = 95%
Autor: Grupo 2
#PASO 9:CONCLUSIÓN

# La variable precipitación (mm) sigue o se explica con un modelo exponencial con parametro λ= 0.012 
#y podemos afirmar con 95% de confianza que la media aritmetica de está variable se encuentra entre 79.52 y 85.36 (mm) 
#con una desviación estándar de 79.97 (mm).