FECHA: 24/12/2025
# ESTADÍSTICA INFERENCIAL
#Cargar datos
setwd("C:/Users/Usuario/Downloads")
datos <- read.csv("soil_pollution_diseases.csv",
header = TRUE,
sep = ";",
stringsAsFactors = FALSE)
# NIVEL DE ENFERMEDAD
Nivel_Enfermedad <- as.character(datos$Disease_Severity)
# Tabla de distribución de frecuencia
TDF_Nivel_Enfermedad<-data.frame(table(Nivel_Enfermedad))
ni <- TDF_Nivel_Enfermedad$Freq
hi <- round((ni / sum(ni)) * 100, 2)
Nivel_Enfermedad <- TDF_Nivel_Enfermedad$Nivel_Enfermedad
TDF_Nivel_Enfermedad <- data.frame(Nivel_Enfermedad, ni, hi)
Summary <- data.frame(Nivel_Enfermedad = "TOTAL", ni = sum(ni),hi = 100)
TDF_Enfermedad_suma<-rbind(TDF_Nivel_Enfermedad, Summary)
colnames(TDF_Enfermedad_suma) <- c("Nivel Enfermedad", "ni", "hi(%)")
# Ordenar la tabla en el orden deseado
TDF_Enfermedad_suma$`Nivel Enfermedad` <- factor(
TDF_Enfermedad_suma$`Nivel Enfermedad`,
levels = c("Severe", "Moderate", "Mild", "TOTAL")
)
TDF_Enfermedad_suma <- TDF_Enfermedad_suma[
order(TDF_Enfermedad_suma$`Nivel Enfermedad`),
]
# TABLA
library(gt)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
TDF_Enfermedad_suma%>%
gt() %>%
tab_header(
title = md("*Tabla Nro. 1*"),
subtitle = md("**Tabla de distribución de frecuencias de los niveles de enfermedad**")
) %>%
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. 1 |
| Tabla de distribución de frecuencias de los niveles de enfermedad |
| Nivel Enfermedad |
ni |
hi(%) |
| Severe |
1023 |
34.10 |
| Moderate |
998 |
33.27 |
| Mild |
979 |
32.63 |
| TOTAL |
3000 |
100.00 |
| Autor: Grupo 3 |
#Gráfica
barplot(hi, main = "Gráfica N°3: Distribución de frecuencias porcentual
de los niveles de enfermedad",
xlab = "Niveles de Enfermedad",
ylab = "Porcentaje",
col = "green",
ylim = c(0,40),
las = 1,
cex.names = 0.6,
names.arg = TDF_Nivel_Enfermedad$Nivel_Enfermedad)

#Hacemos una agrupación entre leve y moderado, y asignamos números a cada valor de la variable.
# Sumar ni de Mild y Moderate
ni_LeveModerado <- sum(
TDF_Nivel_Enfermedad$ni[
TDF_Nivel_Enfermedad$Nivel_Enfermedad %in% c("Mild", "Moderate")
]
)
# Tomar ni de Severe
ni_Severo <- TDF_Nivel_Enfermedad$ni[
TDF_Nivel_Enfermedad$Nivel_Enfermedad == "Severe"
]
# Crear tabla agrupada con códigos 1 y 2
TDF_Agrupada <- data.frame(
Nivel_Enfermedad = c("1", "2"),
ni = c(ni_LeveModerado, ni_Severo)
)
# Frecuencia porcentual
TDF_Agrupada$hi <- round((TDF_Agrupada$ni / sum(TDF_Agrupada$ni)) * 100, 2)
# Agregar TOTAL
Total <- data.frame(
Nivel_Enfermedad = "TOTAL",
ni = sum(TDF_Agrupada$ni),
hi = 100
)
TDF_Agrupada_Final <- rbind(TDF_Agrupada, Total)
TDF_Agrupada_Final
## Nivel_Enfermedad ni hi
## 1 1 1977 65.9
## 2 2 1023 34.1
## 3 TOTAL 3000 100.0
# TABLA AGRUPADA FINAL
library(gt)
library(dplyr)
TDF_Agrupada_Final %>%
gt() %>%
tab_header(
title = md("*Tabla Nro. 2*"),
subtitle = md("**Tabla de distribución de frecuencias de los niveles de enfermedad agrupados**")
) %>%
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 |
| Tabla de distribución de frecuencias de los niveles de enfermedad agrupados |
| Nivel_Enfermedad |
ni |
hi |
| 1 |
1977 |
65.9 |
| 2 |
1023 |
34.1 |
| TOTAL |
3000 |
100.0 |
| Autor: Grupo 3 |
#GRAFICA
bar_pos <- barplot(TDF_Agrupada_Final$hi[1:2],
main = "Gráfica N°4: Distribución porcentual de los niveles de enfermedad agrupados",
xlab = "Niveles de Enfermedad",
ylab = "Porcentaje",
col = "green",
ylim = c(0, 100),
las = 1,
cex.names = 0.8,
names.arg = TDF_Agrupada_Final$Nivel_Enfermedad[1:2])

#Conjetura, debido a que existen dos diagramas de barras vamos a usar el modelo de Bernulli
#Bernulli
# Probabilidades observadas
prob <- TDF_Agrupada_Final$hi[1:2] / 100
names(prob) <- TDF_Agrupada_Final$Nivel_Enfermedad[1:2]
# Modelo Bernoulli
prob_bernoulli <- c(0.5, 0.5)
names(prob_bernoulli) <- names(prob)
# Matriz para gráfica
grafica_matrix <- rbind(
Prob = prob,
Bernoulli = prob_bernoulli
)
# Gráfica
barplot(grafica_matrix,
beside = TRUE,
ylim = c(0, 1),
col = c("lightgreen", "blue"),
main = "Gráfica N°5: Distribución observada vs modelo Bernoulli",
xlab = "Nivel de Enfermedad Agrupado",
ylab = "Porcentaje",
yaxt = "n")
# Eje Y mostrado como porcentaje (sin cambiar los datos)
axis(2,
at = seq(0, 1, 0.1),
labels = seq(0, 100, 10))
# Leyenda
legend("topright",
legend = c("Observada", "Bernoulli"),
fill = c("lightgreen", "blue"))

#TESTS
#Test de Pearson
#Mide el grado de correlación entre la frecuencia observada y la frecuencia esperada
#El coeficiente de correlación de Pearson no pudo ser calculado debido a que el modelo Bernoulli
#asigna probabilidades constantes a las categorías, lo que produce desviación estándar nula en las
#frecuencias esperadas. Por esta razón, el análisis de ajuste se realizó mediante el test de Chi-cuadrado.
#Test Chi-cuadrado
#En el estudio de enfermedad agrupado, el test de Chi-cuadrado se utiliza considerando los grados
#de libertad k-1 y un nivel de significancia previamente fijado. El valor de Chi-cuadrado
#calculado a partir de las frecuencias observadas y esperadas se compara con el valor crítico
#correspondiente.
Fo <- TDF_Agrupada_Final$hi[1:2] / 100
Fo
## [1] 0.659 0.341
Fe <- c(0.5, 0.5)
Fe
## [1] 0.5 0.5
x2 <- sum(((Fo - Fe)^2) / Fe)
x2
## [1] 0.101124
vc <- qchisq(0.95, df = 1)
vc
## [1] 3.841459
x2 < vc
## [1] TRUE