FECHA: 24/01/2026
#Estadística inferencial
#PASO 1: DEFINIR LA VARIABLE DE INTERÉS
#La variable pH del 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 6.0 y 6.1.
#PASO 2: TABLA DE DISTRIBUCIÓN DE FRECUENCIAS
datos <- read.csv("soil_pollution_diseases.csv", header = TRUE, dec = ".", sep = ",")
# Extracción Variable Cuantitativa Continua
Suelo_pH <- datos$Soil_pH
# Histograma
k <- 1 + (3.3 * log10(3000))
k <- floor(k)
min <- min(Suelo_pH)
max <- max(Suelo_pH)
R <- max - min
A <- R / k
histoP <- hist(
Suelo_pH,
main = "Gráfica Nº1: Distribución del pH del 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.01
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_Suelo_pH <- data.frame(LimInf, LimSup, Mc, ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)
totalni <- sum(ni)
totalhi <- 100
TDF_Histo_Suelo_pH_completo <- rbind(
TDF_Histo_Suelo_pH,
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_Suelo_pH_completo %>%
gt() %>%
tab_header(
title = md("Tabla Nº2"),
subtitle = md("*Tabla simplificada de distribución del pH del 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º2 |
| Tabla simplificada de distribución del pH del Suelo |
| LimInf |
LimSup |
Mc |
ni |
hi |
Ni_asc |
Ni_dsc |
Hi_asc |
Hi_dsc |
| 4.5 |
5 |
4.75 |
426 |
14.20 |
426 |
3000 |
14.2 |
100.01 |
| 5 |
5.5 |
5.25 |
368 |
12.27 |
794 |
2574 |
26.47 |
85.81 |
| 5.5 |
6 |
5.75 |
371 |
12.37 |
1165 |
2206 |
38.84 |
73.54 |
| 6 |
6.5 |
6.25 |
377 |
12.57 |
1542 |
1835 |
51.41 |
61.17 |
| 6.5 |
7 |
6.75 |
380 |
12.67 |
1922 |
1458 |
64.08 |
48.6 |
| 7 |
7.5 |
7.25 |
339 |
11.30 |
2261 |
1078 |
75.38 |
35.93 |
| 7.5 |
8 |
7.75 |
379 |
12.63 |
2640 |
739 |
88.01 |
24.63 |
| 8 |
8.5 |
8.25 |
360 |
12.00 |
3000 |
360 |
100.01 |
12 |
| Total |
|
|
3000 |
100.00 |
|
|
|
|
| Autor: Grupo 3 |
#PASO 3: HISTOGRAMA
hist(
Suelo_pH,
breaks = seq(min, max, A),
main = "Gráfica Nº2: Distribución del pH del Suelo",
xlab = "pH",
ylab = "Porcentaje",
col = "#4A90E2"
)

#PARA FACILITAR EL TRABAJO SE REDUJO LA AMPLITUD DE LOS INTERVALOS DE 8 A 5 PARA APLICAR UN SOLO MODELO PARA LA VARIABLE PH DE SUELO
Suelo_pH <- na.omit(datos$Soil_pH)
n <- length(Suelo_pH)
k <- floor(1 + 3.3 * log10(n))
minP <- min(Suelo_pH)
maxP <- max(Suelo_pH)
R <- maxP - minP
A <- R / k
A2 <- 3 * A
ini <- floor(minP / A2) * A2
fin <- ceiling(maxP / A2) * A2
breaks2 <- seq(ini, fin, by = A2)
histoP2 <- hist(Suelo_pH, breaks = breaks2, plot = FALSE)
#TABLA CON INTERVALOS REDUCIDOS
Limites <- histoP2$breaks
LimInf <- Limites[1:(length(Limites) - 1)]
LimSup <- Limites[2:length(Limites)]
Mc <- histoP2$mids
ni <- histoP2$counts
hi <- round(ni / sum(ni) * 100, 2)
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- round(cumsum(hi), 2)
Hi_dsc <- round(rev(cumsum(rev(hi))), 2)
LimInf <- round(LimInf, 2)
LimSup <- round(LimSup, 2)
Mc <- round(Mc, 2)
TDF_Histo_Suelo_pH2 <- data.frame(LimInf, LimSup, Mc, ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)
TDF_Histo_Suelo_pH2_completo <- rbind(
TDF_Histo_Suelo_pH2,
data.frame(LimInf="Total", LimSup=" ", Mc=" ",
ni=sum(ni), hi=100,
Ni_asc=" ", Ni_dsc=" ",
Hi_asc=" ", Hi_dsc=" ")
)
tabla_Histo2 <- TDF_Histo_Suelo_pH2_completo %>%
gt() %>%
tab_header(
title = md("Tabla NºX"),
subtitle = md("*Tabla simplificada del pH del Suelo (intervalos amplios)*")
) %>%
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_Histo2
| Tabla NºX |
| Tabla simplificada del pH del Suelo (intervalos amplios) |
| LimInf |
LimSup |
Mc |
ni |
hi |
Ni_asc |
Ni_dsc |
Hi_asc |
Hi_dsc |
| 4 |
5 |
4.5 |
426 |
14.20 |
426 |
3000 |
14.2 |
99.99 |
| 5 |
6 |
5.5 |
739 |
24.63 |
1165 |
2574 |
38.83 |
85.79 |
| 6 |
7 |
6.5 |
757 |
25.23 |
1922 |
1835 |
64.06 |
61.16 |
| 7 |
8 |
7.5 |
718 |
23.93 |
2640 |
1078 |
87.99 |
35.93 |
| 8 |
9 |
8.5 |
360 |
12.00 |
3000 |
360 |
99.99 |
12 |
| Total |
|
|
3000 |
100.00 |
|
|
|
|
| Autor: Grupo 3 |
histoP2 <- hist(
Suelo_pH,
breaks = breaks2,
plot = FALSE
)
hi <- round(histoP2$counts / sum(histoP2$counts) * 100, 2)
plot(
NA,
xlim = range(histoP2$breaks),
ylim = c(0, max(hi) * 1.10),
main = "Gráfica N°3: Distribución del pH del Suelo",
xlab = "pH",
ylab = "Porcentaje"
)
rect(
xleft = histoP2$breaks[-length(histoP2$breaks)],
ybottom = 0,
xright = histoP2$breaks[-1],
ytop = hi,
col = "#4A90E2",
)
text(
x = histoP2$mids,
y = hi,
labels = paste0(hi, "%"),
pos = 3,
cex = 0.8
)

histoP2 <- hist(Suelo_pH, breaks = breaks2, plot = FALSE)
hi <- round(histoP2$counts / sum(histoP2$counts) * 100, 2)
#PASO 4: CONJETURA DE MODELO
#DESPUES DE REDUCIR LOS INTERVALOS MI VARIABLE Y SUS BARRAS SE COMPORTAN COMO UN MODELO DE DISTRIBUCIÓN NORMAL
#PASO 5: CÁLCULO DE PARAMETROS
mu <- mean(Suelo_pH, na.rm = TRUE)
sigma <- sd(Suelo_pH, na.rm = TRUE)
plot(
NA,
xlim = range(histoP2$breaks),
ylim = c(0, max(hi) * 1.15),
main = "Modelo normal del pH del Suelo (hi %)",
xlab = "pH",
ylab = "hi (%)"
)
rect(
xleft = histoP2$breaks[-length(histoP2$breaks)],
ybottom = 0,
xright = histoP2$breaks[-1],
ytop = hi,
col = "grey",
border = "white"
)

x <- seq(min(histoP2$breaks), max(histoP2$breaks), by = 0.001)
y <- dnorm(x, mean = mu, sd = sigma) * 100 * A2
plot(
NA,
xlim = range(histoP2$breaks),
ylim = c(0, max(c(hi, y)) * 1.10),
main = "Gráfica N°4:Diagrama de Realidad en comparación con el modelo normal del ph en el suelo",
xlab = "pH",
ylab = "Densidad de probabilidad"
)
rect(
xleft = histoP2$breaks[-length(histoP2$breaks)],
ybottom = 0,
xright = histoP2$breaks[-1],
ytop = hi,
col = "grey",
border = "white"
)
lines(x, y, lwd = 4, col = "blue3")

#PASO 6: APLICACIÓN DE TESTS
#PASO 6.1: #TEST DE PEARSON
# Frecuencia simple observada
Fo <- histoP2$counts
Fo
## [1] 426 739 757 718 360
# Número de intervalos
h <- length(Fo)
# Probabilidades teóricas por intervalo
P <- c(0)
for (i in 1:h) {
P[i] <- (pnorm(histoP2$breaks[i + 1], mu, sigma) -
pnorm(histoP2$breaks[i], mu, sigma))
}
# Frecuencia esperada
Fe <- P * length(Suelo_pH)
# Correlación de Pearson (%)
Correlación <- cor(Fo, Fe) * 100
Correlación
## [1] 94.74349
#PASO 6.2 TEST CHI CUADRADO
grados_libertad <- length(histoP2)-1
grados_libertad
## [1] 5
nivel_significancia <- 0.05
n <- length(Suelo_pH)
Fo <- (histoP2$counts / n) * 100
Fo
## [1] 14.20000 24.63333 25.23333 23.93333 12.00000
Fe <- P * 100
Fe
## [1] 8.740961 24.072092 33.171095 22.894781 7.905644
x2 <- sum((Fe - Fo)^2 / Fe)
x2
## [1] 7.489525
umbral_aceptacion <- qchisq(1 - nivel_significancia, grados_libertad)
umbral_aceptacion
## [1] 11.0705
x2 < umbral_aceptacion
## [1] TRUE
#PASO 7: CÁLCULO DE PROBABILIDADES
#¿Qué porcentaje de nuevas muestras de suelo tendrá pH entre 6.0 y 7.0?”
prob1 <- pnorm(7.0, mu, sigma) - pnorm(6.0, mu, sigma)
prob1 * 100
## [1] 33.1711
#¿Qué porcentaje de nuevas muestras tendrá pH mayor a 7.5?”
prob2 <- 1 - pnorm(7.5, mu, sigma)
prob2 * 100
## [1] 18.71379
#Si se toman 50 muestras, ¿Cuántas se espera que tengan pH entre 5.5 y 6.5?”
n_muestra <- 50
prob3 <- pnorm(6.5, mu, sigma) - pnorm(5.5, mu, sigma)
esperadas <- prob3 * n_muestra
esperadas
## [1] 15.40444
#PASO 8: INTERVALO DE CONFIANZA
ph <- datos$Soil_pH
media <-mean(ph)
sigma<-sd(ph)
n<-length(ph)
error<- 2*(sigma/sqrt(n))
#Límites intevalo de cofianza
lim_infer<- round(media-2*error,2)
lim_super<- round(media+2*error,2)
tabla_intervalo <- data.frame(Intervalo = "P [6.38< µ < 6.55] = 95%")
library(gt)
library(dplyr)
tabla_intervalo %>%
gt() %>%
tab_header(
title = md("*Tabla Nro. 2.1*"),
subtitle = md("**Intervlo de confianza del ph 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.1 |
| **Intervlo de confianza del ph del suelo en el estudio de la contaminación del suelo y su impacto en la salud ** |
| Intervalo |
| P [6.38< µ < 6.55] = 95% |
| Autor: GRUPO 3 |
#PASO 9:CONCLUSIÓN
#La variable nivel de ph en el suelo se explica con un modelo normal, con parametro
#µ= 6.46 y σ= 1.16 y podemos afirmar con un 95% de confianza que la media aritmetica se
#encuentra entre 6.38 y 6.55 con una desviación estandar de 1.16.