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.
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.
Establecer los efectos de la contaminación del suelo y su relación con la salud humana, a través del análisis multivariado.
Región: Zona geográfica dentro del país donde se registró el caso.
Tipo de Contaminante: Sustancia química o elemento identificado como contaminante del suelo (plomo, mercurio, pesticidas).
Industria Cercana: Presencia y tipo de industria cercana a la zona del caso.
Tipo de Enfermedad: Tipo de enfermedad o condición de salud relacionada con la exposición a contaminantes.
Género más afectado: Género predominante entre los afectados (masculino, femenino, otro).
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”)
# 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).
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
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.
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.
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")
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
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
# 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)
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)
mu=mean(datos$Temperatura_C)
desvest=sd(datos$Temperatura_C)
yy=rnorm(276,mu,desvest)
qqplot(datos$Temperatura_C,yy)
yygam=rgamma(276,shape=72,scale=1.2)
qqplot(datos$Temperatura_C,yygam,col=2)
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.
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.
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₀).
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.
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%.
# 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.
# 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.