Introducción

El presente trabajo busca aplicar los conocimientos adquiridos en el curso, mediante el uso de una base de datos que simula escenarios reales de contaminación del suelo y sus efectos en la salud. Se analizan 3,000 registros con variables ambientales, agrícolas, demográficas y de salud.

Planteamiento del problema

La contaminación del suelo afecta a más de 2 mil millones de personas, con pérdidas económicas anuales superiores a 20 billones de dólares. Se busca asociar estos escenarios con enfermedades en las personas expuestas y estudiar variables clave para la toma de decisiones.

Objetivos

Objetivo General

Establecer los efectos de la contaminación del suelo y su relación con la salud humana, a través del análisis multivariado.

Objetivos Específicos

  • Identificar asociaciones entre tipos y concentraciones de contaminantes y enfermedades.
  • Analizar el efecto del pH, temperatura, humedad y prácticas agrícolas.
  • Estudiar grupos demográficos más vulnerables.

Variables a Estudiar

Cuantitativas y de razón

  1. Concentración de contaminante (mg/kg): Representa la concentración del contaminante en el suelo, expresada en miligramos por kilogramo. Permite evaluar el nivel de contaminación al que está expuesta la población y el ecosistema.
  2. pH del suelo: Mide la acidez o alcalinidad del suelo. Un pH bajo indica acidez y un pH alto alcalinidad, reflejando la capacidad del suelo para neutralizar ácidos. Este factor influye tanto en el crecimiento de los cultivos como en la salud humana y ambiental.
  3. Temperatura (°C):Analiza la temperatura ambiental de la zona estudiada. La temperatura afecta directamente los procesos físico-químicos del suelo y la actividad de los contaminantes.
  4. Humedad (%): Porcentaje de humedad en el suelo. La humedad influye en la concentración de contaminantes y en la actividad química y biológica del ecosistema.
  5. Lluvia (mm):Cantidad de precipitación en la zona. La lluvia puede modificar la concentración de contaminantes por arrastre, acumulación o lixiviación (extracción de sustancias del suelo por el agua).
  6. Materia orgánica del suelo (%): Porcentaje de materia orgánica presente en el suelo. Indica la capacidad del suelo para retener contaminantes; a mayor materia orgánica, mayor capacidad de retención de contaminantes.

Cualitativas nominales

  1. Región: Zona geográfica dentro del país donde se registró el caso.

  2. Tipo de Contaminante: Sustancia química o elemento identificado como contaminante del suelo (plomo, mercurio, pesticidas).

  3. Industria Cercana: Presencia y tipo de industria cercana a la zona del caso.

  4. Tipo de Enfermedad: Tipo de enfermedad o condición de salud relacionada con la exposición a contaminantes.

  5. Género más afectado: Género predominante entre los afectados (masculino, femenino, otro).

Cualitativas Ordinales:

  1. Severidad de Enfermedad: Grado de gravedad de la enfermedad (leve, moderada, severa).

install.packages(“vegan”) install.packages(“FactoMineR”) install.packages(“ks”) install.packages(“GGally”) install.packages(“aplpack”) install.packages(“readxl”) install.packages(“dplyr”) install.packages(“cluster”) install.packages(“factoextra”) install.packages(“readxl”) install.packages(“fitdistrplus”) install.packages(“MASS”) install.packages(“ggplot2”) install.packages(“moments”) install.packages(“ecostats”)

Análisis Estadístico

1. Encuentre el valor de la estimación de la densidad kernel univariada para cada valor de las variables numéricas del registro 15 para los kernel rectangular, triangular y gaussiano. Interprete.

# Llamamos las librerías 
library(ks)
library(GGally)
library(readxl)
library(dplyr)
library(ggplot2)
library(psych)
library(skimr)
library(corrplot)
library(plotrix)
library("RColorBrewer")
library(car)
library(aplpack)
library(moments)     # Para asimetría, curtosis, etc.
library(mvabund)     # Requerido por ecostats
library(nortest)     # Pruebas de normalidad como Anderson-Darling
library(vcd)         # Visualización y análisis de datos categóricos
library(Rgof)        # Pruebas de bondad de ajuste (e.g., Chi-cuadrado)
library(vegan)
library(FactoMineR)
library(ggplot2)
library(ecostats)

library(readxl)

# Cargar el archivo
df <- read_excel("soil_pollution_diseases_2.1.xlsx")

# Verifica las columnas y tipos
str(df)
## tibble [3,000 × 12] (S3: tbl_df/tbl/data.frame)
##  $ Región                             : chr [1:3000] "Africa" "Africa" "Europa" "Asia" ...
##  $ Tipo_de_Contaminante               : chr [1:3000] "Plomo" "Plomo" "Plomo" "Plomo" ...
##  $ Concentración_de_Contaminante_mg_kg: num [1:3000] 7804 1633 16733 8923 9393 ...
##  $ Suelo_pH                           : num [1:3000] 83 796 535 566 764 518 489 814 524 819 ...
##  $ Temperatura_C                      : num [1:3000] 356 310 164 314 170 123 339 191 439 131 ...
##  $ Humedad_%                          : num [1:3000] 649 731 338 305 586 912 530 697 781 347 ...
##  $ Lluvia_mm                          : num [1:3000] 624 82 1217 1169 2370 ...
##  $ Industria_Cercana                  : chr [1:3000] "Minería" "Minería" "Químico" "Ninguno" ...
##  $ Materia_Orgánica_del_Suelo_%       : num [1:3000] 198 971 549 398 94 818 52 544 90 359 ...
##  $ Tipo_de_Enfermedad.                : chr [1:3000] "Enfermedad gastrointestinal" "Cáncer" "Enfermedad gastrointestinal" "Trastorno Neurológico" ...
##  $ Severidad_de_Enfermedad            : chr [1:3000] "Moderado" "Leve" "Grave" "Grave" ...
##  $ Género_más_afectado                : chr [1:3000] "masculino" "Ambos" "Ambos" "masculino" ...
# Seleccionar solo variables numéricas
num_vars <- sapply(df, is.numeric)
df_num <- df[, num_vars]

# Registro 15
registro_15 <- df_num[15, ]
print(registro_15)
## # A tibble: 1 × 6
##   Concentración_de_Contaminante_m…¹ Suelo_pH Temperatura_C `Humedad_%` Lluvia_mm
##                               <dbl>    <dbl>         <dbl>       <dbl>     <dbl>
## 1                              6564       58           355         678      3549
## # ℹ abbreviated name: ¹​Concentración_de_Contaminante_mg_kg
## # ℹ 1 more variable: `Materia_Orgánica_del_Suelo_%` <dbl>
# Estimar densidad con diferentes kernels para cada variable numérica
for (var in names(registro_15)) {
  cat("\nVariable:", var, "\n")
  
  # Usar toda la columna como base de densidad
  variable_data <- df_num[[var]]
  
  for (kernel_type in c("rectangular", "triangular", "gaussian")) {
    dens <- density(variable_data, kernel = kernel_type)
    
    # Estimar densidad en el valor específico del registro 15
    valor <- registro_15[[var]]
    densidad_en_valor <- approx(dens$x, dens$y, xout = valor)$y
    
    cat("Kernel:", kernel_type, "-> Densidad estimada:", densidad_en_valor, "\n")
  }
}
## 
## Variable: Concentración_de_Contaminante_mg_kg 
## Kernel: rectangular -> Densidad estimada: 4.634934e-05 
## Kernel: triangular -> Densidad estimada: 4.647417e-05 
## Kernel: gaussian -> Densidad estimada: 4.662572e-05 
## 
## Variable: Suelo_pH 
## Kernel: rectangular -> Densidad estimada: 0.0008810415 
## Kernel: triangular -> Densidad estimada: 0.001071663 
## Kernel: gaussian -> Densidad estimada: 0.001121506 
## 
## Variable: Temperatura_C 
## Kernel: rectangular -> Densidad estimada: 0.002890103 
## Kernel: triangular -> Densidad estimada: 0.002895929 
## Kernel: gaussian -> Densidad estimada: 0.002890139 
## 
## Variable: Humedad_% 
## Kernel: rectangular -> Densidad estimada: 0.001344041 
## Kernel: triangular -> Densidad estimada: 0.001354385 
## Kernel: gaussian -> Densidad estimada: 0.001353663 
## 
## Variable: Lluvia_mm 
## Kernel: rectangular -> Densidad estimada: 0.0002611699 
## Kernel: triangular -> Densidad estimada: 0.0002548124 
## Kernel: gaussian -> Densidad estimada: 0.0002524158 
## 
## Variable: Materia_Orgánica_del_Suelo_% 
## Kernel: rectangular -> Densidad estimada: 0.0009440928 
## Kernel: triangular -> Densidad estimada: 0.0009462734 
## Kernel: gaussian -> Densidad estimada: 0.000945562

Se calcularon los valores de la estimación de densidad kernel univariada para el registro 15 en las seis variables numéricas. Los resultados obtenidos para cada kernel (gaussiano, triangular y rectangular) muestran valores muy similares, lo que sugiere que la forma de la distribución no varía considerablemente según el tipo de kernel empleado. Esto indica que el valor del registro 15 tiene una densidad moderada, es decir, se encuentra en una región común de la distribución para cada variable.

Las variables como Temperatura y Humedad presentan valores muy típicos del conjunto de datos (densidad alta).

Lluvia y Concentración de contaminante tienen valores menos comunes (densidades más bajas).

2. Encuentre y analice una matriz de gráficos de dispersión con diagramas de caja en la diagonal. Muestre las matrices de covarianza y correlación correspondientes.

library(readxl)
library(GGally)
library(ggplot2)

# Cargar los datos
df <- read_excel("soil_pollution_diseases_2.1.xlsx")

# Seleccionar variables numéricas
num_vars <- sapply(df, is.numeric)
df_num <- df[, num_vars]
names(df_num) <- make.names(names(df_num))  # Por si hay espacios

# Función personalizada para boxplot en la diagonal
diag_boxplot <- function(data, mapping, ...) {
  ggplot(data = data, mapping = mapping) + 
    geom_boxplot(fill = "skyblue", alpha = 0.4) +
    theme_minimal(base_size =8)
}

# Crear el gráfico con puntos verdes y letra grande
p <- ggpairs(
  df_num,
  diag = list(continuous = diag_boxplot),
  upper = list(continuous = wrap("cor", size = 3)),
  lower = list(continuous = wrap("points", alpha = 0.4, colour = "#9EEDAF"))
)

# Aplicar tema con texto más grande
p + theme(text = element_text(size = 8))

# Matriz de covarianza
cat("Matriz de Covarianza:\n")
## Matriz de Covarianza:
print(cov(df_num))
##                                     Concentración_de_Contaminante_mg_kg
## Concentración_de_Contaminante_mg_kg                       35880381.3528
## Suelo_pH                                                       914.8485
## Temperatura_C                                                  946.5211
## Humedad_.                                                   -48695.0910
## Lluvia_mm                                                    16896.3902
## Materia_Orgánica_del_Suelo_.                                 22092.5147
##                                        Suelo_pH Temperatura_C   Humedad_.
## Concentración_de_Contaminante_mg_kg   914.84846     946.52114 -48695.0910
## Suelo_pH                            41165.10102      40.21004   -398.8209
## Temperatura_C                          40.21004   10169.86862   -577.2645
## Humedad_.                            -398.82091    -577.26448  45615.1834
## Lluvia_mm                           -5302.68888    3809.80960   -681.9606
## Materia_Orgánica_del_Suelo_.        -1109.39756    -949.29517    991.0996
##                                        Lluvia_mm Materia_Orgánica_del_Suelo_.
## Concentración_de_Contaminante_mg_kg   16896.3902                   22092.5147
## Suelo_pH                              -5302.6889                   -1109.3976
## Temperatura_C                          3809.8096                    -949.2952
## Humedad_.                              -681.9606                     991.0996
## Lluvia_mm                           1328760.3952                    2639.6061
## Materia_Orgánica_del_Suelo_.           2639.6061                   89163.3330
# Matriz de correlación
cat("\nMatriz de Correlación:\n")
## 
## Matriz de Correlación:
print(cor(df_num))
##                                     Concentración_de_Contaminante_mg_kg
## Concentración_de_Contaminante_mg_kg                        1.0000000000
## Suelo_pH                                                   0.0007527591
## Temperatura_C                                              0.0015669102
## Humedad_.                                                 -0.0380629061
## Lluvia_mm                                                  0.0024470456
## Materia_Orgánica_del_Suelo_.                               0.0123516074
##                                          Suelo_pH Temperatura_C    Humedad_.
## Concentración_de_Contaminante_mg_kg  0.0007527591   0.001566910 -0.038062906
## Suelo_pH                             1.0000000000   0.001965225 -0.009203619
## Temperatura_C                        0.0019652248   1.000000000 -0.026801707
## Humedad_.                           -0.0092036187  -0.026801707  1.000000000
## Lluvia_mm                           -0.0226729597   0.032773458 -0.002770009
## Materia_Orgánica_del_Suelo_.        -0.0183117339  -0.031524663  0.015540659
##                                        Lluvia_mm Materia_Orgánica_del_Suelo_.
## Concentración_de_Contaminante_mg_kg  0.002447046                  0.012351607
## Suelo_pH                            -0.022672960                 -0.018311734
## Temperatura_C                        0.032773458                 -0.031524663
## Humedad_.                           -0.002770009                  0.015540659
## Lluvia_mm                            1.000000000                  0.007668716
## Materia_Orgánica_del_Suelo_.         0.007668716                  1.000000000

Matriz

Boxplots en la diagonal:

Permiten ver la distribución de cada variable.

Algunas variables como “Suelo_pH” y “Temperatura_C” parecen tener valores dentro de un rango más estrecho (menos dispersión).

“Lluvia_mm” y “Materia_Orgánica_del_Suelo” tienen valores más amplios y dispersos.

Correlaciones (parte superior):

La mayoría de los coeficientes de correlación son cercanos a 0, lo que indica relaciones muy débiles o nulas:

Humedad_ con Concentración_de_Contaminante: -0.038 (débilmente negativa).

Otros pares como Suelo_pH con Concentración_de_Contaminante: 0.001 → correlación prácticamente nula.

Gráficos de dispersión (parte inferior):

Se observa un patrón disperso y sin forma clara, confirmando las correlaciones débiles.

No hay relaciones lineales fuertes evidentes entre las variables.

Matrices de covarianza y correlacion

3. Encuentre y analice gráficos de rostros de Chernoff.

library(readxl)

# Leer el archivo Excel normalmente
datos <- read_excel("soil_pollution_diseases_2.1.xlsx")

# ✅ Solución 1: convertir los nombres de columna a UTF-8
colnames(datos) <- iconv(colnames(datos), from = "latin1", to = "UTF-8")

# Ahora puedes ver los nombres para confirmar que se ven bien
print(colnames(datos))
##  [1] "Región"                             
##  [2] "Tipo_de_Contaminante"                
##  [3] "Concentración_de_Contaminante_mg_kg"
##  [4] "Suelo_pH"                            
##  [5] "Temperatura_C"                       
##  [6] "Humedad_%"                           
##  [7] "Lluvia_mm"                           
##  [8] "Industria_Cercana"                   
##  [9] "Materia_Orgánica_del_Suelo_%"       
## [10] "Tipo_de_Enfermedad."                 
## [11] "Severidad_de_Enfermedad"             
## [12] "Género_más_afectado"
# Después de esto ya puedes usar los nombres en tu gráfico
library(aplpack)

# Seleccionar variables numéricas
colnames(datos)[3] <- "Concentracion"
colnames(datos)[9] <- "Materia_Organica"
faces(datos[1:12, c("Concentracion", 
                  "Suelo_pH", 
                  "Temperatura_C", 
                  "Humedad_%", 
                  "Lluvia_mm", 
                  "Materia_Organica")])

## effect of variables:
##  modified item       Var               
##  "height of face   " "Concentracion"   
##  "width of face    " "Suelo_pH"        
##  "structure of face" "Temperatura_C"   
##  "height of mouth  " "Humedad_%"       
##  "width of mouth   " "Lluvia_mm"       
##  "smiling          " "Materia_Organica"
##  "height of eyes   " "Concentracion"   
##  "width of eyes    " "Suelo_pH"        
##  "height of hair   " "Temperatura_C"   
##  "width of hair   "  "Humedad_%"       
##  "style of hair   "  "Lluvia_mm"       
##  "height of nose  "  "Materia_Organica"
##  "width of nose   "  "Concentracion"   
##  "width of ear    "  "Suelo_pH"        
##  "height of ear   "  "Temperatura_C"

“Concentracion” A más concentración de contaminante (cara más alargada). “Suelo_pH” pH del suelo afecta el ancho de la cara. “Materia_Organica” A más materia orgánica rostro más sonriente. “Temperatura_C” La temperatura cambia la forma del rostro. “Humedad_%” Humedad cambia la altura de la boca.

Hay una variedad clara en las caras: algunas tienen expresiones neutras o tristes (como la cara 1 y 7), mientras otras parecen más felices o activas (como la 6 o 9). Esto sugiere grandes diferencias entre las observaciones en cuanto a condiciones ambientales o niveles de contaminación.

Encuentre y analice diferentes tipos de distancia entre los datos

Para cada variable analizada (mínimo 3 variables numéricas y 2 categóricas) proponga una distribución de probabilidad y realice una prueba de bondad de ajuste.

library(moments)

## Loading required package: mvabund
library(nortest)
library(moments)
library(vcd)
## Loading required package: grid
library(Rgof)
datos <- read_excel("soil_pollution_diseases_2.1.xlsx")

Gráficos exploratorios, mirar simetría, apuntamiento, datos atípicos

hist(datos$Temperatura_C)

boxplot(datos$Temperatura_C)

stem(datos$Temperatura_C)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   10 | 00001111112222222333333333333333444444444444444555556666666667777777+86
##   12 | 00000000001122222222222333333333333334444444455555555666666666666666+103
##   14 | 00000000111111112222222223333444444444444455555556666666677777777888+104
##   16 | 00000000011111222222222233333333334444444445555555555555666666777777+92
##   18 | 00000000000011111111122222333333444444444455555555566666666666777777+102
##   20 | 00000000000011111111122222222222333334444444444444455566666677777777+79
##   22 | 00000000011111111111222222222233333333344444444455555566666677777777+98
##   24 | 00000000111111111122222222222333333333334444444455555566666666666667+110
##   26 | 00000001111122222222233333344444444555555555556666666666677777777888+89
##   28 | 00000000001111111122222233344444444555555555566677777777777777788888+74
##   30 | 00000000111111111122222223333444444555555555666666666666677777778888+88
##   32 | 00000111111111112222222233333333444444444445555555556666666666677777+104
##   34 | 00011111111112222222223333333344444455555566666666677777777778888888+91
##   36 | 00000011111111122222223333333333334444444455555566666666666666777788+90
##   38 | 00000000001111111122222222233333333344444444555555555566667777777788+70
##   40 | 00000001111111122222222233333333334444444455555555555555555555666666+84
##   42 | 00000111222233333333444444444555555555556666666666667777777777888888+98
##   44 | 00000000111111111112222223333333333444444445555555555566666667777788

Medidas de resumen

summary(datos$Temperatura_C)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   100.0   185.0   270.0   272.3   358.2   450.0
mean(datos$Temperatura_C)
## [1] 272.251
median(datos$Temperatura_C)
## [1] 270
skewness(datos$Temperatura_C)
## [1] 0.03240186
kurtosis(datos$Temperatura_C)
## [1] 1.800454

Histogramas de frecuencia relativa, densidad, ajuste a la distribución de probabilidad teórica

# Asegúrate de que sea numérica
datos$Temperatura_C <- as.numeric(datos$Temperatura_C)

# Eliminar NAs si los hay
temperatura <- na.omit(datos$Temperatura_C)

# Crear histograma con densidad
hist(temperatura, freq = FALSE,
     ylab = "Densidad", col = "whitesmoke",
     ylim = c(0, 0.045),
     main = "Distribucion de frecuencias de Temperatura",
     xlab = "Temperatura")

# Agregar líneas de densidad (si deseas)
lines(density(temperatura), col = "#BF3EFF", lwd = 3)

# Paso 1: Asegurarse de que la variable es numérica
datos$Temperatura_C <- as.numeric(as.character(datos$Temperatura_C))

# Paso 2: Eliminar valores NA
temperatura <- na.omit(datos$Temperatura_C)

# Paso 3: Luego tu código funciona perfecto
hist(temperatura, freq = FALSE,
     ylab = "Densidad", col = "whitesmoke",
     ylim = c(0, 0.045),
     main = "Distribucion de Temperatura",
     xlab = "Temperatura")



curve(dgamma(x, shape = 71.444, scale = 1.212),
      from = min(temperatura), to = max(temperatura),
      col = "chocolate", add = TRUE, lwd = 3)

Verificación de porcentajes a k desviaciones estándar de la media para la distribución normal

Intervalos=c(mean(datos$Temperatura_C)-4*sd(datos$Temperatura_C),mean(datos$Temperatura_C)-3*sd(datos$Temperatura_C),mean(datos$Temperatura_C)-2*sd(datos$Temperatura_C),mean(datos$Temperatura_C)-sd(datos$Temperatura_C),                 mean(datos$Temperatura_C),mean(datos$Temperatura_C)+sd(datos$Temperatura_C),mean(datos$Temperatura_C)+2*sd(datos$Temperatura_C),mean(datos$Temperatura_C)+3*sd(datos$Temperatura_C),mean(datos$Temperatura_C)+4*sd(datos$Temperatura_C))
temperatura <- na.omit(datos$Temperatura_C)
hist(temperatura, freq = FALSE,
     ylab = "Densidad", col = "whitesmoke",
     ylim = c(0, 0.045),
     main = "Distribucion de Temperatura",
     xlab = "Temperatura")

hist(temperatura, breaks = Intervalos, plot = FALSE)
## $breaks
## [1] -131.13207  -30.28630   70.55947  171.40523  272.25100  373.09677  473.94253
## [8]  574.78830  675.63407
## 
## $counts
## [1]   0   0 635 888 858 619   0   0
## 
## $density
## [1] 0.000000000 0.000000000 0.002098915 0.002935175 0.002836014 0.002046029
## [7] 0.000000000 0.000000000
## 
## $mids
## [1] -80.70918  20.13658 120.98235 221.82812 322.67388 423.51965 524.36542
## [8] 625.21118
## 
## $xname
## [1] "temperatura"
## 
## $equidist
## [1] TRUE
## 
## attr(,"class")
## [1] "histogram"
qqnorm(datos$Temperatura_C)

qqenvelope(datos$Temperatura_C)

Comparación de los datos de la muestra, con una muestra simulada de la distribución normal teórica propuesta

mu=mean(datos$Temperatura_C)
desvest=sd(datos$Temperatura_C)
yy=rnorm(276,mu,desvest)
qqplot(datos$Temperatura_C,yy)

Comparación de los datos de la muestra, con una muestra simulada de la distribución teórica Gamma propuesta

yygam=rgamma(276,shape=72,scale=1.2)
qqplot(datos$Temperatura_C,yygam,col=2)

Prueba de hipótesis de Kolmogorov Smirnov

ks.test(datos$Temperatura_C, "pnorm", mean=86, sd=10)
## Warning in ks.test.default(datos$Temperatura_C, "pnorm", mean = 86, sd = 10):
## ties should not be present for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  datos$Temperatura_C
## D = 0.96294, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(datos$Temperatura_C, "pgamma",shape=71.444, scale=10)
## Warning in ks.test.default(datos$Temperatura_C, "pgamma", shape = 71.444, :
## ties should not be present for the Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  datos$Temperatura_C
## D = 0.99983, p-value < 2.2e-16
## alternative hypothesis: two-sided

• Medidas descriptivas: o Media: 272.25 o Mediana: 270 o Asimetría: 0.032 → muy cercana a 0, lo que sugiere una distribución aproximadamente simétrica. o Curtosis: 1.80 → inferior a 3, lo que indica que la distribución es platicúrtica (menos concentrada en la media que una normal). • Visualización: o El histograma muestra una forma moderadamente simétrica. o El gráfico Q-Q respecto a la Normal indica una aproximación aceptable, aunque con desviaciones en los extremos. o Se superpuso también una curva de densidad teórica Gamma, pero el ajuste visual no fue convincente. • Comparación con distribuciones teóricas: o Se compararon los datos reales con simulaciones de distribuciones Normal y Gamma mediante gráficos Q-Q. o Se verificó la proporción de datos dentro de ±1, ±2 y ±3 desviaciones estándar de la media, observándose cierta concordancia con la regla empírica normal. • Pruebas de bondad de ajuste (Kolmogorov-Smirnov): o Para la Normal (media = 86, sd = 10): D = 0.9629, p-value < 2.2e-16 → se rechaza la hipótesis nula, no es una buena aproximación. o Para la Gamma (shape = 71.44, scale = 10): D = 0.9998, p-value < 2.2e-16 → también se rechaza la hipótesis nula, el ajuste es aún peor. A pesar de que visualmente la variable Temperatura_C presenta una distribución aproximadamente simétrica, los resultados de la prueba de Kolmogorov-Smirnov muestran que ni la distribución Normal ni la Gamma se ajustan bien a los datos (ambos p-valores son menores a 0.05). No obstante, debido a la simetría, la proximidad entre media y mediana, y una asimetría muy cercana a 0, se puede considerar que la variable se aproxima a una distribución normal, aunque no exactamente. Por tanto, para fines prácticos y de modelado inicial, se propone la distribución Normal como modelo aproximado, reconociendo sus limitaciones.

5. De acuerdo con el contexto de sus datos, plantee y resuelva pruebas de hipótesis, de una y dos medias, de una y dos varianzas, de una y dos proporciones, de datos pareados.

Prueba para una media

colnames(datos)[3] <- "Concentracion"
x <- datos$Concentracion
t.test(x, mu = 50)
## 
##  One Sample t-test
## 
## data:  x
## t = 85.363, df = 2999, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 50
## 95 percent confidence interval:
##  9171.019 9599.885
## sample estimates:
## mean of x 
##  9385.452

Dado que el valor p es muchísimo menor que 0.05, rechazamos H₀ con evidencia muy fuerte. Esto indica que: La media de la concentración de contaminante es significativamente diferente de 50 mg/kg.

Prueba para dos medias

colnames(datos)[3] <- "Concentracion"
grupo1 <- subset(datos, Tipo_de_Contaminante == "Plomo")$Concentracion
grupo2 <- subset(datos, Tipo_de_Contaminante == "Mercurio")$Concentracion

t.test(grupo1, grupo2)
## 
##  Welch Two Sample t-test
## 
## data:  grupo1 and grupo2
## t = 0.6717, df = 965.9, p-value = 0.5019
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -492.7285 1005.5623
## sample estimates:
## mean of x mean of y 
##  9445.297  9188.880

Dado que el p-valor = 0.5019 > 0.05, no hay suficiente evidencia para rechazar la hipótesis nula (H₀).

Prueba para una varianza

x <- datos$Suelo_pH
n <- length(x)
s2 <- var(x)
alfa <- 0.05
chi_cuadrado <- (n - 1) * s2 / 38000


gl <- n - 1
p_value <- 2 * min(pchisq(chi_cuadrado, gl), 1 - pchisq(chi_cuadrado, gl))
p_value
## [1] 0.001641288

como p-value < 0.05 ⇒ se Rechaza H₀ → La varianza es diferente de 38000.

prueba para dos varianzas

var.test(grupo1, grupo2)
## 
##  F test to compare two variances
## 
## data:  grupo1 and grupo2
## F = 1.0076, num df = 528, denom df = 457, p-value = 0.9352
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.8433855 1.2023438
## sample estimates:
## ratio of variances 
##           1.007573

Como:

p-value=0.9352>0.05

No rechazamos la hipótesis nula.

Conclusión: No hay evidencia estadísticamente significativa para decir que las varianzas de los dos grupos sean diferentes. Por tanto, se asume que son iguales. ## Prueba para una proporcion

prop <- table(datos$Severidad_de_Enfermedad == "Grave")
if ("TRUE" %in% names(prop)) {
  prop.test(x = prop["TRUE"], n = sum(prop), p = 0.5)
} else {
  print("No hay casos con severidad 'Grave'")
}
## 
##  1-sample proportions test with continuity correction
## 
## data:  prop["TRUE"] out of sum(prop), null probability 0.5
## X-squared = 302.74, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.3240853 0.3583253
## sample estimates:
##     p 
## 0.341

Hay evidencia estadísticamente significativa para afirmar que la proporción de casos graves no es 0.5, sino alrededor de 34.1%.

Prueba para dos proporciones

# Crear tabla cruzada de dos proporciones
tabla <- table(datos$Tipo_de_Contaminante, datos$Severidad_de_Enfermedad == "Grave")

# Asegúrate de que contiene los nombres esperados
if (all(c("Plomo", "Mercurio") %in% rownames(tabla))) {
  prop.test(
    x = c(tabla["Plomo", "TRUE"], tabla["Mercurio", "TRUE"]),
    n = c(sum(tabla["Plomo", ]), sum(tabla["Mercurio", ]))
  )
} else {
  print("No hay datos suficientes para Plomo o Mercurio.")
}
## 
##  2-sample test for equality of proportions with continuity correction
## 
## data:  c(tabla["Plomo", "TRUE"], tabla["Mercurio", "TRUE"]) out of c(sum(tabla["Plomo", ]), sum(tabla["Mercurio", ]))
## X-squared = 0.0097338, df = 1, p-value = 0.9214
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.05647704  0.06653970
## sample estimates:
##    prop 1    prop 2 
## 0.3478261 0.3427948

Como valor-p > 0.05, no se rechaza la hipótesis nula.

Con los datos disponibles, no hay evidencia estadísticamente significativa de que las proporciones de severidad grave difieran entre los contaminantes Plomo y Mercurio.

6. Selecciones variables adecuadas y encuentre e interprete un modelo de regresión lineal. Estimación del modelo e inferencia.

# Asegurarse de que los nombres estén bien definidos
colnames(datos)[3] <- "Concentracion"
colnames(datos)[4] <- "Suelo_pH"
colnames(datos)[5] <- "Temperatura"
colnames(datos)[6] <- "Humedad"
colnames(datos)[7] <- "Lluvia"
colnames(datos)[8] <- "Materia_Organica"



# Ajustar modelo de regresión
modelo <- lm(Concentracion ~ Suelo_pH + Temperatura + Humedad + Lluvia + Materia_Organica, data = datos)
summary(modelo)
## 
## Call:
## lm(formula = Concentracion ~ Suelo_pH + Temperatura + Humedad + 
##     Lluvia + Materia_Organica, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9800.1 -5417.0   -63.4  5215.8 11135.4 
## 
## Coefficients:
##                           Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             9554.68873  610.54811  15.649   <2e-16 ***
## Suelo_pH                   0.03981    0.53891   0.074   0.9411    
## Temperatura                0.08744    1.08523   0.081   0.9358    
## Humedad                   -1.06449    0.51213  -2.079   0.0377 *  
## Lluvia                     0.02097    0.09492   0.221   0.8252    
## Materia_OrganicaMinería  137.43307  343.70219   0.400   0.6893    
## Materia_OrganicaNinguno  802.31659  345.29821   2.324   0.0202 *  
## Materia_OrganicaQuímico  846.79410  339.85448   2.492   0.0128 *  
## Materia_OrganicaTextil    18.09132  345.17681   0.052   0.9582    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5981 on 2991 degrees of freedom
## Multiple R-squared:  0.005527,   Adjusted R-squared:  0.002867 
## F-statistic: 2.078 on 8 and 2991 DF,  p-value: 0.03463
# Resumen del modelo
summary(modelo)
## 
## Call:
## lm(formula = Concentracion ~ Suelo_pH + Temperatura + Humedad + 
##     Lluvia + Materia_Organica, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9800.1 -5417.0   -63.4  5215.8 11135.4 
## 
## Coefficients:
##                           Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             9554.68873  610.54811  15.649   <2e-16 ***
## Suelo_pH                   0.03981    0.53891   0.074   0.9411    
## Temperatura                0.08744    1.08523   0.081   0.9358    
## Humedad                   -1.06449    0.51213  -2.079   0.0377 *  
## Lluvia                     0.02097    0.09492   0.221   0.8252    
## Materia_OrganicaMinería  137.43307  343.70219   0.400   0.6893    
## Materia_OrganicaNinguno  802.31659  345.29821   2.324   0.0202 *  
## Materia_OrganicaQuímico  846.79410  339.85448   2.492   0.0128 *  
## Materia_OrganicaTextil    18.09132  345.17681   0.052   0.9582    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5981 on 2991 degrees of freedom
## Multiple R-squared:  0.005527,   Adjusted R-squared:  0.002867 
## F-statistic: 2.078 on 8 and 2991 DF,  p-value: 0.03463

Intercepto (9554.69): Valor estimado de la concentración cuando todas las variables son 0. No tiene una interpretación directa en este contexto.

Suelo_pH y Temperatura: No son significativos (p > 0.9), lo que indica que no tienen un efecto claro sobre la concentración del contaminante.

Humedad: Tiene un efecto negativo y significativo (p = 0.0377). Esto sugiere que, en promedio, al aumentar 1 unidad de humedad, la concentración baja en 1.06 mg/kg (todo lo demás constante).

Lluvia: No significativa (p = 0.8252).

Materia_Organica:

Ninguno y Químico son significativos, lo que indica que en estos tipos hay diferencias reales frente al grupo base.

Los demás (Minería y Textil) no son significativo

Conclusión general

Modelo es débil, no explica bien la variabilidad de la concentración del contaminante.

Solo la humedad y dos niveles de la materia orgánica tienen relación significativa con la concentración.