UNIVERSIDAD CENTRAL DEL ECUADOR

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

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