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).

Análisis Estadístico

# Llamamos las librerías 
library(readxl)
library(dplyr)
library(ggplot2)
library(psych)
library(skimr)
library(corrplot)
library(plotrix)
library("RColorBrewer")
library(car)

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

# Ver los nombres de las columnas para confirmar
colnames(datos)
##  [1] "Región"                              "Tipo_de_Contaminante"               
##  [3] "Concentración_de_Contaminante_mg_kg" "Suelo_pH"                           
##  [5] "Temperatura_C"                       "Humedad_%"                          
##  [7] "Lluvia_mm"                           "Industria_Cercana"                  
##  [9] "Materia_Orgánica_del_Suelo_%"        "Tipo_de_Enfermedad."                
## [11] "Severidad_de_Enfermedad"             "Género_más_afectado"
# Le mostramos a R qué tipo de dato tenemos en cada columna 
datos <- read_excel("soil_pollution_diseases_2.1.xlsx", 
                    col_types = c("text", "text", "numeric", "numeric", "numeric", "numeric","numeric", "text", "numeric", "text", "text", "text"))

head(datos)
## # A tibble: 6 × 12
##   Región Tipo_de_Contaminante Concentración_de_Contamin…¹ Suelo_pH Temperatura_C
##   <chr>  <chr>                                      <dbl>    <dbl>         <dbl>
## 1 Africa Plomo                                       7804       83           356
## 2 Africa Plomo                                       1633      796           310
## 3 Europa Plomo                                      16733      535           164
## 4 Asia   Plomo                                       8923      566           314
## 5 Africa Cromo                                       9393      764           170
## 6 Europa Plomo                                      12347      518           123
## # ℹ abbreviated name: ¹​Concentración_de_Contaminante_mg_kg
## # ℹ 7 more variables: `Humedad_%` <dbl>, Lluvia_mm <dbl>,
## #   Industria_Cercana <chr>, `Materia_Orgánica_del_Suelo_%` <dbl>,
## #   Tipo_de_Enfermedad. <chr>, Severidad_de_Enfermedad <chr>,
## #   Género_más_afectado <chr>
tail(datos)
## # A tibble: 6 × 12
##   Región      Tipo_de_Contaminante Concentración_de_Con…¹ Suelo_pH Temperatura_C
##   <chr>       <chr>                                 <dbl>    <dbl>         <dbl>
## 1 Australia   Cromo                                 11012      769           395
## 2 Asia        Mercurio                               1427      706           123
## 3 Asia        Pesticidas                            11021      523           254
## 4 Europa      Cromo                                 14615      525           358
## 5 Asia        Plomo                                 14318      463           204
## 6 América de… Cadmio                                14693      699           366
## # ℹ abbreviated name: ¹​Concentración_de_Contaminante_mg_kg
## # ℹ 7 more variables: `Humedad_%` <dbl>, Lluvia_mm <dbl>,
## #   Industria_Cercana <chr>, `Materia_Orgánica_del_Suelo_%` <dbl>,
## #   Tipo_de_Enfermedad. <chr>, Severidad_de_Enfermedad <chr>,
## #   Género_más_afectado <chr>
str(datos)
## 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" ...

Medidas de resumen univariadas, tendencia central y su variabilidad

options(scipen = 999)

names(datos)[3] <- "Concentracion"
mean(datos$Concentracion, na.rm = TRUE)
## [1] 9385.452
media_conc=mean(datos$Concentracion)
varianza_conc=var(datos$Concentracion)
sd_conc=sd(datos$Concentracion)
#calcular cve
cve_media_conc=100*sd_conc/media_conc
medianaConc=median(datos$Concentracion)
MAD_conc=mad(datos$Concentracion)
cve_mediana_conc=100*MAD_conc/medianaConc
#min,max,cuartiles,media y median
resumen=data.frame(Estadísticos_Descriptivos_univariados=c(mean(datos$Concentracion),var(datos$Concentracion),sd(datos$Concentracion),100*sd(datos$Concentracion)/mean(datos$Concentracion),median(datos$Concentracion),100*mad(datos$Concentracion),mad(datos$Concentracion)/median(datos$Concentracion)))
rownames(resumen)=c("Promedio","Varianza","Desv_estandar","cve_media","Mediana","MAD","cve_mediana")
resumen
##               Estadísticos_Descriptivos_univariados
## Promedio                               9385.4516667
## Varianza                           35880381.3527815
## Desv_estandar                          5990.0234852
## cve_media                                63.8224318
## Mediana                                9376.0000000
## MAD                                  794747.7300000
## cve_mediana                               0.8476405
# Evitar notación científica
options(scipen = 999)

# Calcular estadísticas para la variable Suelo_pH
media_pH        <- mean(datos$Suelo_pH, na.rm = TRUE)
varianza_pH     <- var(datos$Suelo_pH, na.rm = TRUE)
sd_pH           <- sd(datos$Suelo_pH, na.rm = TRUE)
cve_media_pH    <- 100 * sd_pH / media_pH
mediana_pH      <- median(datos$Suelo_pH, na.rm = TRUE)
MAD_pH          <- mad(datos$Suelo_pH, na.rm = TRUE)
cve_mediana_pH  <- 100 * MAD_pH / mediana_pH

# Crear data.frame con los resultados
resumen_pH <- data.frame(
  Valor = c(media_pH, varianza_pH, sd_pH, cve_media_pH, mediana_pH, MAD_pH, cve_mediana_pH),
  row.names = c("Promedio", "Varianza", "Desv_estandar", "cve_media", "Mediana", "MAD", "cve_mediana")
)

# Mostrar resumen
resumen_pH
##                     Valor
## Promedio        593.19667
## Varianza      41165.10102
## Desv_estandar   202.89185
## cve_media        34.20313
## Mediana         624.00000
## MAD             167.53380
## cve_mediana      26.84837
# Evitar notación científica
options(scipen = 999)

# Calcular estadísticas para la variable Temperatura_C
media_temp        <- mean(datos$Temperatura_C, na.rm = TRUE)
varianza_temp     <- var(datos$Temperatura_C, na.rm = TRUE)
sd_temp           <- sd(datos$Temperatura_C, na.rm = TRUE)
cve_media_temp    <- 100 * sd_temp / media_temp
mediana_temp      <- median(datos$Temperatura_C, na.rm = TRUE)
MAD_temp          <- mad(datos$Temperatura_C, na.rm = TRUE)
cve_mediana_temp  <- 100 * MAD_temp / mediana_temp

# Crear data.frame con los resultados
resumen_temp <- data.frame(
  Valor = c(media_temp, varianza_temp, sd_temp, cve_media_temp, mediana_temp, MAD_temp, cve_mediana_temp),
  row.names = c("Promedio", "Varianza", "Desv_estandar", "cve_media", "Mediana", "MAD", "cve_mediana")
)

# Mostrar resumen
resumen_temp
##                     Valor
## Promedio        272.25100
## Varianza      10169.86862
## Desv_estandar   100.84577
## cve_media        37.04147
## Mediana         270.00000
## MAD             128.98620
## cve_mediana      47.77267
names(datos)[6] <- "Humedad"


# Evitar notación científica
options(scipen = 999)

# Calcular estadísticas para la variable Humedad_%
media_humedad        <- mean(datos$Humedad, na.rm = TRUE)
varianza_humedad     <- var(datos$Humedad, na.rm = TRUE)
sd_humedad           <- sd(datos$Humedad, na.rm = TRUE)
cve_media_humedad    <- 100 * sd_humedad / media_humedad
mediana_humedad      <- median(datos$Humedad, na.rm = TRUE)
MAD_humedad          <- mad(datos$Humedad, na.rm = TRUE)
cve_mediana_humedad  <- 100 * MAD_humedad / mediana_humedad

# Crear data.frame con los resultados
resumen_humedad <- data.frame(
  Valor = c(media_humedad, varianza_humedad, sd_humedad, cve_media_humedad,
            mediana_humedad, MAD_humedad, cve_mediana_humedad),
  row.names = c("Promedio", "Varianza", "Desv_estandar", "cve_media",
                "Mediana", "MAD", "cve_mediana")
)

# Mostrar resumen
resumen_humedad
##                     Valor
## Promedio        582.22867
## Varianza      45615.18344
## Desv_estandar   213.57711
## cve_media        36.68269
## Mediana         584.50000
## MAD             273.53970
## cve_mediana      46.79892
# Calcular estadísticas para la variable Lluvia_mm
media_lluvia        <- mean(datos$Lluvia_mm, na.rm = TRUE)
varianza_lluvia     <- var(datos$Lluvia_mm, na.rm = TRUE)
sd_lluvia           <- sd(datos$Lluvia_mm, na.rm = TRUE)
cve_media_lluvia    <- 100 * sd_lluvia / media_lluvia
mediana_lluvia      <- median(datos$Lluvia_mm, na.rm = TRUE)
MAD_lluvia          <- mad(datos$Lluvia_mm, na.rm = TRUE)
cve_mediana_lluvia  <- 100 * MAD_lluvia / mediana_lluvia

# Crear data.frame con los resultados
resumen_lluvia <- data.frame(
  Valor = c(media_lluvia, varianza_lluvia, sd_lluvia, cve_media_lluvia,
            mediana_lluvia, MAD_lluvia, cve_mediana_lluvia),
  row.names = c("Promedio", "Varianza", "Desv_estandar", "cve_media",
                "Mediana", "MAD", "cve_mediana")
)

# Mostrar resumen
resumen_lluvia
##                       Valor
## Promedio         2003.16600
## Varianza      1328760.39524
## Desv_estandar    1152.71870
## cve_media          57.54484
## Mediana          1990.00000
## MAD              1481.11740
## cve_mediana        74.42801
# Cambiar el nombre de la columna problemática
names(datos)[9] <- "Materia_Orgánica_del_Suelo"

# Evitar notación científica
options(scipen = 999)

# Calcular estadísticas para la variable Materia_Orgánica_del_Suelo_%
media_mos        <- mean(datos$Materia_Orgánica_del_Suelo, na.rm = TRUE)
varianza_mos     <- var(datos$Materia_Orgánica_del_Suelo, na.rm = TRUE)
sd_mos           <- sd(datos$Materia_Orgánica_del_Suelo, na.rm = TRUE)
cve_media_mos    <- 100 * sd_mos / media_mos
mediana_mos      <- median(datos$Materia_Orgánica_del_Suelo, na.rm = TRUE)
MAD_mos          <- mad(datos$Materia_Orgánica_del_Suelo, na.rm = TRUE)
cve_mediana_mos  <- 100 * MAD_mos / mediana_mos
# Crear data.frame con los resultados

resumen_mos <- data.frame(
  Valor = c(media_mos, varianza_mos, sd_mos, cve_media_mos,
            mediana_mos, MAD_mos, cve_mediana_mos),
  row.names = c("Promedio", "Varianza", "Desv_estandar", "cve_media",
                "Mediana", "MAD", "cve_mediana")
)
# Crear data.frame con los resultados
resumen_mos
##                     Valor
## Promedio        464.49033
## Varianza      89163.33302
## Desv_estandar   298.60230
## cve_media        64.28601
## Mediana         454.00000
## MAD             395.85420
## cve_mediana      87.19256

Resumen estadístico Basico

summary(datos$Concentracion)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      61    3898    9376    9385   14585   19999
summary(datos$Temperatura_C)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   100.0   185.0   270.0   272.3   358.2   450.0
summary(datos$Suelo_pH)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    45.0   514.0   624.0   593.2   739.0   849.0
summary(datos$Humedad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   200.0   399.0   584.5   582.2   768.0   950.0
summary(datos$Lluvia_mm)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       0    1006    1990    2003    2998    3997
summary(datos$Materia_Orgánica_del_Suelo)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     5.0   191.8   454.0   464.5   722.0   999.0

Medidas de posición

min_datos <- min(datos$Concentracion)
min_datos
## [1] 61
max_datos <- max(datos$Concentracion)
max_datos
## [1] 19999
range(datos$Concentracion)
## [1]    61 19999
rango_datos=max(datos$Concentracion)-min(datos$Concentracion)
cuartiles_datos <- quantile(datos$Concentracion,probs = seq(0,1,by=0.25))
cuartiles_datos
##       0%      25%      50%      75%     100% 
##    61.00  3898.25  9376.00 14585.25 19999.00
#Cuartil 3 - Cuartil !
rango_intercuartil_datos<- IQR(datos$Concentracion)
rango_intercuartil_datos
## [1] 10687
Medidas_Posic=data.frame("Medidas de posición"=c(min(datos$Concentracion),max(datos$Concentracion),max(datos$Concentracion)-min(datos$Concentracion),quantile(datos$Concentracion,probs = seq(0,1,by=0.25)),IQR(datos$Concentracion)))
rownames(Medidas_Posic)=c("Mínimo","Máximo","Rango","Cuartil0_min","Cuartil_1","Cuartil_2","Cuartil_3","Cuartil_4_max","IQR")
Medidas_Posic
##               Medidas.de.posición
## Mínimo                      61.00
## Máximo                   19999.00
## Rango                    19938.00
## Cuartil0_min                61.00
## Cuartil_1                 3898.25
## Cuartil_2                 9376.00
## Cuartil_3                14585.25
## Cuartil_4_max            19999.00
## IQR                      10687.00
min_datos <- min(datos$Temperatura_C)
min_datos
## [1] 100
max_datos <- max(datos$Temperatura_C)
max_datos
## [1] 450
range(datos$Temperatura_C)
## [1] 100 450
rango_datos <- max(datos$Temperatura_C) - min(datos$Temperatura_C)
cuartiles_datos <- quantile(datos$Temperatura_C, probs = seq(0, 1, by = 0.25))
cuartiles_datos
##     0%    25%    50%    75%   100% 
## 100.00 185.00 270.00 358.25 450.00
# Cálculo del Rango Intercuartílico (IQR = Cuartil 3 - Cuartil 1)
rango_intercuartil_datos <- IQR(datos$Temperatura_C)
rango_intercuartil_datos
## [1] 173.25
# Creación del data frame con las medidas de posición
Medidas_Posic <- data.frame(
  "Medidas de posición" = c(
    min(datos$Temperatura_C),
    max(datos$Temperatura_C),
    max(datos$Temperatura_C) - min(datos$Temperatura_C),
    quantile(datos$Temperatura_C, probs = seq(0, 1, by = 0.25)),
    IQR(datos$Temperatura_C)
  )
)

rownames(Medidas_Posic) <- c("Mínimo", "Máximo", "Rango", 
                            "Cuartil0_min", "Cuartil_1", "Cuartil_2", 
                            "Cuartil_3", "Cuartil_4_max", "IQR")

Medidas_Posic
##               Medidas.de.posición
## Mínimo                     100.00
## Máximo                     450.00
## Rango                      350.00
## Cuartil0_min               100.00
## Cuartil_1                  185.00
## Cuartil_2                  270.00
## Cuartil_3                  358.25
## Cuartil_4_max              450.00
## IQR                        173.25
min_datos <- min(datos$Suelo_pH)
min_datos
## [1] 45
max_datos <- max(datos$Suelo_pH)
max_datos
## [1] 849
range(datos$Suelo_pH)
## [1]  45 849
rango_datos=max(datos$Suelo_pH)-min(datos$Suelo_pH)
cuartiles_datos <- quantile(datos$Suelo_pH,probs = seq(0,1,by=0.25))
cuartiles_datos
##   0%  25%  50%  75% 100% 
##   45  514  624  739  849
#Cuartil 3 - Cuartil 1
rango_intercuartil_datos<- IQR(datos$Suelo_pH)
rango_intercuartil_datos
## [1] 225
Medidas_Posic=data.frame("Medidas de posición"=c(min(datos$Suelo_pH),max(datos$Suelo_pH),max(datos$Suelo_pH)-min(datos$Suelo_pH),quantile(datos$Suelo_pH,probs = seq(0,1,by=0.25)),IQR(datos$Suelo_pH)))
rownames(Medidas_Posic)=c("Mínimo","Máximo","Rango","Cuartil0_min","Cuartil_1","Cuartil_2","Cuartil_3","Cuartil_4_max","IQR")
Medidas_Posic
##               Medidas.de.posición
## Mínimo                         45
## Máximo                        849
## Rango                         804
## Cuartil0_min                   45
## Cuartil_1                     514
## Cuartil_2                     624
## Cuartil_3                     739
## Cuartil_4_max                 849
## IQR                           225
min_datos <- min(datos$Humedad)
min_datos
## [1] 200
max_datos <- max(datos$Humedad)
max_datos
## [1] 950
range(datos$Humedad)
## [1] 200 950
rango_datos=max(datos$Humedad)-min(datos$Humedad)
cuartiles_datos <- quantile(datos$Humedad,probs = seq(0,1,by=0.25))
cuartiles_datos
##    0%   25%   50%   75%  100% 
## 200.0 399.0 584.5 768.0 950.0
#Cuartil 3 - Cuartil 1
rango_intercuartil_datos<- IQR(datos$Humedad)
rango_intercuartil_datos
## [1] 369
Medidas_Posic=data.frame("Medidas de posición"=c(min(datos$Humedad),max(datos$Humedad),max(datos$Humedad)-min(datos$Humedad),quantile(datos$Humedad,probs = seq(0,1,by=0.25)),IQR(datos$Humedad)))
rownames(Medidas_Posic)=c("Mínimo","Máximo","Rango","Cuartil0_min","Cuartil_1","Cuartil_2","Cuartil_3","Cuartil_4_max","IQR")
Medidas_Posic
##               Medidas.de.posición
## Mínimo                      200.0
## Máximo                      950.0
## Rango                       750.0
## Cuartil0_min                200.0
## Cuartil_1                   399.0
## Cuartil_2                   584.5
## Cuartil_3                   768.0
## Cuartil_4_max               950.0
## IQR                         369.0
min_datos <- min(datos$Lluvia_mm)
min_datos
## [1] 0
max_datos <- max(datos$Lluvia_mm)
max_datos
## [1] 3997
range(datos$Lluvia_mm)
## [1]    0 3997
rango_datos=max(datos$Lluvia_mm)-min(datos$Lluvia_mm)
cuartiles_datos <- quantile(datos$Lluvia_mm,probs = seq(0,1,by=0.25))
cuartiles_datos
##     0%    25%    50%    75%   100% 
##    0.0 1006.0 1990.0 2997.5 3997.0
#Cuartil 3 - Cuartil 1
rango_intercuartil_datos<- IQR(datos$Lluvia_mm)
rango_intercuartil_datos
## [1] 1991.5
Medidas_Posic=data.frame("Medidas de posición"=c(min(datos$Lluvia_mm),max(datos$Lluvia_mm),max(datos$Lluvia_mm)-min(datos$Lluvia_mm),quantile(datos$Lluvia_mm,probs = seq(0,1,by=0.25)),IQR(datos$Lluvia_mm)))
rownames(Medidas_Posic)=c("Mínimo","Máximo","Rango","Cuartil0_min","Cuartil_1","Cuartil_2","Cuartil_3","Cuartil_4_max","IQR")
Medidas_Posic
##               Medidas.de.posición
## Mínimo                        0.0
## Máximo                     3997.0
## Rango                      3997.0
## Cuartil0_min                  0.0
## Cuartil_1                  1006.0
## Cuartil_2                  1990.0
## Cuartil_3                  2997.5
## Cuartil_4_max              3997.0
## IQR                        1991.5
min_datos <- min(datos$Materia_Orgánica_del_Suelo)
min_datos
## [1] 5
max_datos <- max(datos$Materia_Orgánica_del_Suelo)
max_datos
## [1] 999
range(datos$Materia_Orgánica_del_Suelo)
## [1]   5 999
rango_datos=max(datos$Materia_Orgánica_del_Suelo)-min(datos$Materia_Orgánica_del_Suelo)
cuartiles_datos <- quantile(datos$Materia_Orgánica_del_Suelo,probs = seq(0,1,by=0.25))
cuartiles_datos
##     0%    25%    50%    75%   100% 
##   5.00 191.75 454.00 722.00 999.00
#Cuartil 3 - Cuartil 1
rango_intercuartil_datos<- IQR(datos$Materia_Orgánica_del_Suelo)
rango_intercuartil_datos
## [1] 530.25
Medidas_Posic=data.frame("Medidas de posición"=c(min(datos$Materia_Orgánica_del_Suelo),max(datos$Materia_Orgánica_del_Suelo),max(datos$Materia_Orgánica_del_Suelo)-min(datos$Materia_Orgánica_del_Suelo),quantile(datos$Materia_Orgánica_del_Suelo,probs = seq(0,1,by=0.25)),IQR(datos$Materia_Orgánica_del_Suelo)))
rownames(Medidas_Posic)=c("Mínimo","Máximo","Rango","Cuartil0_min","Cuartil_1","Cuartil_2","Cuartil_3","Cuartil_4_max","IQR")
Medidas_Posic
##               Medidas.de.posición
## Mínimo                       5.00
## Máximo                     999.00
## Rango                      994.00
## Cuartil0_min                 5.00
## Cuartil_1                  191.75
## Cuartil_2                  454.00
## Cuartil_3                  722.00
## Cuartil_4_max              999.00
## IQR                        530.25

Diagrama circular 3d y diagrama de barras

# Tabla de frecuencia por región
tabla_region <- table(datos$Región)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_region), name = "Spectral")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_region,
  radius = 0.9,
  main = "Distribución de registros por Región",
  labels = names(tabla_region),
  explode = 0.1,
  col = colores,
  border = "black",
  labelcex = 0.7
)

# Tabla de frecuencia por contaminante
tabla_contaminante <- table(datos$Tipo_de_Contaminante)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_contaminante), name = "BrBG")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_contaminante,
  radius = 0.9,
  main = "Tipo de contaminante presente en el suelo",
  labels = names(tabla_contaminante),
  explode = 0.1,
  col = colores,
  border = "white",
  labelcex = 0.7
)

# Tabla de frecuencia por Industria_Cercana
tabla_Industria_Cercana <- table(datos$Industria_Cercana)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_Industria_Cercana), name = "PiYG")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_Industria_Cercana,
  radius = 0.9,
  main = "Presencia de Industrias Cercanas en la Zona",
  labels = names(tabla_Industria_Cercana),
  explode = 0.1,
  col = colores,
  border = "white",
  labelcex = 0.7
)

# Tabla de frecuencia por Enfermedad
tabla_Enfermedad <- table(datos$Tipo_de_Enfermedad.)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_Enfermedad), name = "Dark2")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_Enfermedad,
  radius = 0.9,
  main = "Tipo de Enfermedad que padece la población",
  labels = names(tabla_Enfermedad),
  explode = 0.1,
  col = colores,
  border = "blue",
  labelcex = 0.7
)

# Tabla de frecuencia por severidad de enfermedad
tabla_Severidad_de_Enfermedad <- table(datos$Severidad_de_Enfermedad)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_Severidad_de_Enfermedad), name = "BuGn")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_Severidad_de_Enfermedad,
  radius = 0.9,
  main = "Severidad de la Enfermedad que padece la población",
  labels = names(tabla_Severidad_de_Enfermedad),
  explode = 0.1,
  col = colores,
  border = "green",
  labelcex = 0.7
)

# Tabla de frecuencia por contaminante
tabla_Género <- table(datos$Género_más_afectado)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_Género), name = "BuPu")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_Género,
  radius = 0.9,
  main = "Tipo de Genero más afectado",
  labels = names(tabla_Género),
  explode = 0.1,
  col = colores,
  border = "white",
  labelcex = 0.7
)

barplot(table(datos$Región),col="#66CDAA",main="Frecuencias de la variable Región")

barplot(table(datos$Tipo_de_Contaminante),col="#E066FF",main="Frecuencias de la variable tipo de contaminante")

barplot(table(datos$Industria_Cercana),col="#FFE7BA",main="Frecuencias de la variable Industria cercana")

barplot(table(datos$Tipo_de_Enfermedad.),
        col = "#87CEFF",
        main = "Frecuencias de la variable Tipo de Enfermedad",
         cex.names = 0.6,
        las = 1,              # Gira las etiquetas de eje y
        horiz = TRUE)         # Gráfico horizontal

barplot(table(datos$Severidad_de_Enfermedad), 
        col = "#FFB90F", 
        main = "Frecuencias de la variable Severidad de Enfermedad")

barplot(table(datos$Género_más_afectado), 
        col = "#458B00", 
        main = "Frecuencias de la variable Género más afectado")

Histograma de frecuencias absolutas

hist(datos$Concentracion,col="#556B2F",freq=F,main="Distribución de frecuencias de la concentración de contaminantes",xlab="Concentración",ylab="Frecuencias")

hist(datos$Suelo_pH,col="#AB82FF",freq=F,main="Distribución de frecuencias de la concentración de pH en el suelo",xlab="Concentración",ylab="Frecuencias")

hist(datos$Temperatura_C,col="#E0EEE0",freq=F,main="Distribución de frecuencias de la Temperatura C°",xlab="Concentración",ylab="Frecuencias")

hist(datos$Humedad,col="#EE1289",freq=F,main="Distribución de frecuencias de la Humedad",xlab="Concentración",ylab="Frecuencias")

hist(datos$Lluvia_mm,col="#00CDCD",freq=F,main="Distribución de frecuencias de la Lluvia",xlab="Concentración",ylab="Frecuencias")

hist(datos$Materia_Orgánica_del_Suelo,col="#FFE4E1",freq=F,main="Distribución de frecuencias de la concentración de Materia Orgánica",xlab="Concentración",ylab="Frecuencias")

Diagrama de caja

boxplot(datos$Concentracion,col="#8B5F65",ylab="Concentraciodel contaminante",main="Diagrama de caja de Concentración")
stripchart(datos$Concentracion, method = "jitter", pch = 16, add = TRUE, col = "red", cex = 0.3, vertical = TRUE)

boxplot(datos$Suelo_pH,col="#FFA07A",ylab="pH del",main="Diagrama de caja de Suelo pH")
stripchart(datos$Suelo_pH, method = "jitter", pch = 16, add = TRUE, col = "yellow", cex = 0.3, vertical = TRUE)

boxplot(datos$Temperatura_C,col="#6B8E23",ylab="Temperatura C°",main="Diagrama de caja de Temperatura C°")
stripchart(datos$Temperatura_C, method = "jitter", pch = 16, add = TRUE, col = "brown", cex = 0.3, vertical = TRUE)

boxplot(datos$Humedad,col="#A4D3EE",ylab="Humedad",main="Diagrama de caja de Humedad ")
stripchart(datos$Humedad, method = "jitter", pch = 16, add = TRUE, col = "green", cex = 0.3, vertical = TRUE)

boxplot(datos$Lluvia_mm,col="#CD6839",ylab="Lluvia",main="Diagrama de caja de LLuvia")
stripchart(datos$Lluvia_mm, method = "jitter", pch = 16, add = TRUE, col = "black", cex = 0.3, vertical = TRUE)

boxplot(datos$Materia_Orgánica_del_Suelo,col="#FF00FF",ylab="Materia orgánica",main="Diagrama de caja de  Materia orgánica del suelo")
stripchart(datos$Materia_Orgánica_del_Suelo, method = "jitter", pch = 16, add = TRUE, col = "blue", cex = 0.3, vertical = TRUE)

boxplot(datos$Suelo_pH~ datos$Tipo_de_Contaminante,col="#FFE4E1",ylab="Suelo pH",main="Diagrama de caja de Suelo pH")
stripchart(datos$Suelo_pH~ datos$Tipo_de_Contaminante, method = "jitter", pch = 12, add = TRUE, col = "#6A5ACD", vertical = TRUE)

boxplot(datos$Concentracion~ datos$Tipo_de_Enfermedad.,col="#00E5EE",ylab="Suelo pH",main="Diagrama de caja de Concentración del contaminante")
stripchart(datos$Concentracion~ datos$Tipo_de_Enfermedad., method = "jitter", pch = 12, add = TRUE, col = "#EE3A8C", vertical = TRUE)

##Tablas de contingencia, conteos, proporción, porcentajes con respecto al total, porcentajes por fila y porcentajes por columna, diagramas de barras bivariados

# 1. Crear tabla cruzada y proporciones
TablaCruzada <- table(datos$Región, datos$Tipo_de_Contaminante)
TablaCruzada_propFilas <- prop.table(TablaCruzada, margin = 1)
TablaCruzada_propColumnas <- prop.table(TablaCruzada, margin = 2)

# 2. Definir colores (tantos como regiones)
colores <- rainbow(nrow(TablaCruzada))  # 1 color por región

# 3. Gráfico 1: Barras apiladas con etiquetas verticales
par(mfrow = c(1, 2), mar = c(8, 4, 4, 2))  # espacio para etiquetas

barplot(TablaCruzada,
        col = colores,
        las = 2,              # etiquetas verticales
        cex.names = 0.8,
        main = "Frecuencia de Contaminantes por Región",
        ylab = "Frecuencia")

legend("topright", legend = rownames(TablaCruzada), fill = colores, cex = 0.8)

# 4. Gráfico 2: Mosaicplot claro y proporcionado
mosaicplot(TablaCruzada,
           color = colores,
           cex.axis = 0.4,
           main = " Región vs Contaminante",
           las = 1)

# Asegúrate de tener la tabla
TablaCruzada <- table(datos$Región, datos$Tipo_de_Contaminante)
TablaCruzada_propColumnas <- prop.table(TablaCruzada, margin = 2)

# Define colores (tantos como regiones)
colores6 <- rainbow(nrow(TablaCruzada))  # o usa tus propios colores

# Crear gráfico de proporciones por columna (apilado)
par(mfrow = c(1, 1), mar = c(8, 4, 4, 2))  # margen inferior ampliado para etiquetas

barplot(TablaCruzada_propColumnas,
        col = colores6,
        las = 2,            # etiquetas verticales en eje X
        cex.names = 0.8,
        main = "Proporción por Tipo de Contaminante (columnas)",
        ylab = "Proporción")

legend("topright", legend = rownames(TablaCruzada), fill = colores6, cex = 0.8)

# 1. Crear tabla cruzada y proporciones
TablaCruzada2 <- table(datos$Industria_Cercana, datos$Tipo_de_Enfermedad.)
TablaCruzada2_propFilas <- prop.table(TablaCruzada2, margin = 1)
TablaCruzada2_propColumnas <- prop.table(TablaCruzada2, margin = 2)
# Por ejemplo con RColorBrewer
library(RColorBrewer)
colores <- brewer.pal(n = min(nrow(TablaCruzada2), 8), name = "Set2")

# Gráfico de barras
par(mfrow = c(1, 2), mar = c(8, 4, 4, 2))

barplot(TablaCruzada2,
        col = colores,
        las = 2,
        cex.names = 0.8,
        main = "Frecuencia de Enfermedades por Industria cercana",
        ylab = "Frecuencia")

legend("topright", legend = rownames(TablaCruzada2), fill = colores, cex = 0.8)

# Mosaico
mosaicplot(TablaCruzada2,
           color = colores,
           cex.axis = 0.4,
           main = "Industria vs Enfermedad",
           las = 1)

# Gráfico de proporciones por columnas
par(mfrow = c(1, 1), mar = c(8, 4, 4, 2))

barplot(prop.table(TablaCruzada2, margin = 2),
        col = colores,
        las = 2,
        cex.names = 0.8,
        main = "Proporción por Tipo de Industria (columnas)",
        ylab = "Proporción")

legend("topright", legend = rownames(TablaCruzada2), fill = colores, cex = 0.8)

# 1. Crear tabla cruzada y proporciones
TablaCruzada3 <- table(datos$Severidad_de_Enfermedad , datos$Género_más_afectado)
TablaCruzada3_propFilas <- prop.table(TablaCruzada3, margin = 1)
TablaCruzada3_propColumnas <- prop.table(TablaCruzada3, margin = 2)
# Por ejemplo con RColorBrewer
library(RColorBrewer)
colores <- brewer.pal(n = min(nrow(TablaCruzada3), 8), name = "Dark2")

# Gráfico de barras
par(mfrow = c(1, 2), mar = c(8, 4, 4, 2))

barplot(TablaCruzada3,
        col = colores,
        las = 2,
        cex.names = 0.8,
        main = "Frecuencia de Enfermedades por Industria cercana",
        ylab = "Frecuencia")

legend("topright", legend = rownames(TablaCruzada3), fill = colores, cex = 0.8)

# Mosaico
mosaicplot(TablaCruzada3,
           color = colores,
           cex.axis = 0.7,
           main = "Industria vs Enfermedad",
           las = 1)

# Gráfico de proporciones por columnas
par(mfrow = c(1, 1), mar = c(8, 4, 4, 2))

barplot(prop.table(TablaCruzada3, margin = 2),
        col = colores,
        las = 2,
        cex.names = 0.8,
        main = "Proporción por Tipo de Industria (columnas)",
        ylab = "Proporción")

legend("topright", legend = rownames(TablaCruzada3), fill = colores, cex = 0.8)

Diagramas de dispersión generales y por grupos

plot(datos$Concentracion,
     datos$Suelo_pH,
     main = "Diagrama de Dispersión: Concentración vs Suelo pH",
     xlab = "Concentración",
     ylab = "Suelo pH",
     col = "blue",        # color de los puntos
     pch = 19,            # tipo de punto sólido
     cex = 1.2,           # tamaño del punto
     bg = "lightblue")    

plot(datos$Temperatura_C,
     datos$Humedad,
     main = "Diagrama de Dispersión: Temperatura C° vs Humedad",
     xlab = "Temperatura C°",
     ylab = "Humedad",
     col = "#40E0D0",        # color de los puntos
     pch = 19,            # tipo de punto sólido
     cex = 1.2,           # tamaño del punto
     bg = "lightblue")   

plot(datos$Lluvia_mm,
     datos$Materia_Orgánica_del_Suelo,
     main = "Diagrama de Dispersión: Lluvia vs Materia Orgánica del Suelo",
     xlab = "Lluvia",
     ylab = "Materia Orgánica del Suelo",
     col = "#FF3E96",        # color de los puntos
     pch = 19,            # tipo de punto sólido
     cex = 1.2,           # tamaño del punto
     bg = "lightblue")   

Matrices de diagramas de dispersión generales y por grupos. Diferentes gráficos en la diagonal, diagramas de caja, histogramas, densidades.

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = datos,
                  diagonal = list(method = "boxplot"))

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = datos,
                  diagonal = list(method = "histogram"))

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = datos, groups=datos$Región, by.groups=T)

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = datos, groups=datos$Tipo_de_Contaminante, by.groups=T)

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = datos, groups=datos$Industria_Cercana, by.groups=T)

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = datos, groups=datos$Tipo_de_Enfermedad., by.groups=T)

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = datos, groups=datos$Severidad_de_Enfermedad, by.groups=T)

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = datos, groups=datos$Género_más_afectado, by.groups=T)

Matrices de covarianza y correlación

MatrizCor <- cor(datos[, c(3, 4, 5, 6, 7, 9)])
MatrizCor
##                            Concentracion      Suelo_pH Temperatura_C
## Concentracion               1.0000000000  0.0007527591   0.001566910
## Suelo_pH                    0.0007527591  1.0000000000   0.001965225
## Temperatura_C               0.0015669102  0.0019652248   1.000000000
## Humedad                    -0.0380629061 -0.0092036187  -0.026801707
## Lluvia_mm                   0.0024470456 -0.0226729597   0.032773458
## Materia_Orgánica_del_Suelo  0.0123516074 -0.0183117339  -0.031524663
##                                 Humedad    Lluvia_mm Materia_Orgánica_del_Suelo
## Concentracion              -0.038062906  0.002447046                0.012351607
## Suelo_pH                   -0.009203619 -0.022672960               -0.018311734
## Temperatura_C              -0.026801707  0.032773458               -0.031524663
## Humedad                     1.000000000 -0.002770009                0.015540659
## Lluvia_mm                  -0.002770009  1.000000000                0.007668716
## Materia_Orgánica_del_Suelo  0.015540659  0.007668716                1.000000000
MatrizCov=cov(datos[, c(3, 4, 5, 6, 7, 9)])
MatrizCov
##                            Concentracion    Suelo_pH Temperatura_C     Humedad
## Concentracion              35880381.3528   914.84846     946.52114 -48695.0910
## Suelo_pH                        914.8485 41165.10102      40.21004   -398.8209
## Temperatura_C                   946.5211    40.21004   10169.86862   -577.2645
## Humedad                      -48695.0910  -398.82091    -577.26448  45615.1834
## Lluvia_mm                     16896.3902 -5302.68888    3809.80960   -681.9606
## Materia_Orgánica_del_Suelo    22092.5147 -1109.39756    -949.29517    991.0996
##                               Lluvia_mm Materia_Orgánica_del_Suelo
## Concentracion                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
MatrizVar=var(datos[, c(3, 4, 5, 6, 7, 9)])
MatrizVar
##                            Concentracion    Suelo_pH Temperatura_C     Humedad
## Concentracion              35880381.3528   914.84846     946.52114 -48695.0910
## Suelo_pH                        914.8485 41165.10102      40.21004   -398.8209
## Temperatura_C                   946.5211    40.21004   10169.86862   -577.2645
## Humedad                      -48695.0910  -398.82091    -577.26448  45615.1834
## Lluvia_mm                     16896.3902 -5302.68888    3809.80960   -681.9606
## Materia_Orgánica_del_Suelo    22092.5147 -1109.39756    -949.29517    991.0996
##                               Lluvia_mm Materia_Orgánica_del_Suelo
## Concentracion                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

Muestra

datos <- read_excel("soil_pollution_diseases_2.1.xlsx")

set.seed(123)  # para que el resultado sea reproducible
 muestra50 <- datos[sample(nrow(datos), 50), ]
 options(scipen = 999)

names(muestra50)[3] <- "Concentracion"
mean(muestra50$Concentracion, na.rm = TRUE)
## [1] 8522.22
media_conc=mean(muestra50$Concentracion)
varianza_conc=var(muestra50$Concentracion)
sd_conc=sd(muestra50$Concentracion)
#calcular cve
cve_media_conc=100*sd_conc/media_conc
medianaConc=median(muestra50$Concentracion)
MAD_conc=mad(muestra50$Concentracion)
cve_mediana_conc=100*MAD_conc/medianaConc
#min,max,cuartiles,media y median
resumen=data.frame(Estadísticos_Descriptivos_univariados=c(mean(muestra50$Concentracion),var(muestra50$Concentracion),sd(muestra50$Concentracion),100*sd(muestra50$Concentracion)/mean(muestra50$Concentracion),median(muestra50$Concentracion),100*mad(muestra50$Concentracion),mad(muestra50$Concentracion)/median(muestra50$Concentracion)))
rownames(resumen)=c("Promedio","Varianza","Desv_estandar","cve_media","Mediana","MAD","cve_mediana")
resumen
##               Estadísticos_Descriptivos_univariados
## Promedio                               8522.2200000
## Varianza                           30911609.6853061
## Desv_estandar                          5559.8210120
## cve_media                                65.2391162
## Mediana                                8846.5000000
## MAD                                  689038.3500000
## cve_mediana                               0.7788824
# Evitar notación científica
options(scipen = 999)

# Calcular estadísticas para la variable Suelo_pH
media_pH        <- mean(muestra50$Suelo_pH, na.rm = TRUE)
varianza_pH     <- var(muestra50$Suelo_pH, na.rm = TRUE)
sd_pH           <- sd(muestra50$Suelo_pH, na.rm = TRUE)
cve_media_pH    <- 100 * sd_pH / media_pH
mediana_pH      <- median(muestra50$Suelo_pH, na.rm = TRUE)
MAD_pH          <- mad(muestra50$Suelo_pH, na.rm = TRUE)
cve_mediana_pH  <- 100 * MAD_pH / mediana_pH

# Crear data.frame con los resultados
resumen_pH <- data.frame(
  Valor = c(media_pH, varianza_pH, sd_pH, cve_media_pH, mediana_pH, MAD_pH, cve_mediana_pH),
  row.names = c("Promedio", "Varianza", "Desv_estandar", "cve_media", "Mediana", "MAD", "cve_mediana")
)

# Mostrar resumen
resumen_pH
##                     Valor
## Promedio        630.08000
## Varianza      37443.91184
## Desv_estandar   193.50429
## cve_media        30.71107
## Mediana         652.50000
## MAD             194.96190
## cve_mediana      29.87922
# Evitar notación científica
options(scipen = 999)

# Calcular estadísticas para la variable Temperatura_C
media_temp        <- mean(muestra50$Temperatura_C, na.rm = TRUE)
varianza_temp     <- var(muestra50$Temperatura_C, na.rm = TRUE)
sd_temp           <- sd(muestra50$Temperatura_C, na.rm = TRUE)
cve_media_temp    <- 100 * sd_temp / media_temp
mediana_temp      <- median(muestra50$Temperatura_C, na.rm = TRUE)
MAD_temp          <- mad(muestra50$Temperatura_C, na.rm = TRUE)
cve_mediana_temp  <- 100 * MAD_temp / mediana_temp

# Crear data.frame con los resultados
resumen_temp <- data.frame(
  Valor = c(media_temp, varianza_temp, sd_temp, cve_media_temp, mediana_temp, MAD_temp, cve_mediana_temp),
  row.names = c("Promedio", "Varianza", "Desv_estandar", "cve_media", "Mediana", "MAD", "cve_mediana")
)

# Mostrar resumen
resumen_temp
##                    Valor
## Promedio       267.88000
## Varianza      8864.43429
## Desv_estandar   94.15112
## cve_media       35.14675
## Mediana        274.00000
## MAD             95.62770
## cve_mediana     34.90062
names(muestra50)[6] <- "Humedad"


# Evitar notación científica
options(scipen = 999)

# Calcular estadísticas para la variable Humedad_%
media_humedad        <- mean(muestra50$Humedad, na.rm = TRUE)
varianza_humedad     <- var(muestra50$Humedad, na.rm = TRUE)
sd_humedad           <- sd(muestra50$Humedad, na.rm = TRUE)
cve_media_humedad    <- 100 * sd_humedad / media_humedad
mediana_humedad      <- median(muestra50$Humedad, na.rm = TRUE)
MAD_humedad          <- mad(muestra50$Humedad, na.rm = TRUE)
cve_mediana_humedad  <- 100 * MAD_humedad / mediana_humedad

# Crear data.frame con los resultados
resumen_humedad <- data.frame(
  Valor = c(media_humedad, varianza_humedad, sd_humedad, cve_media_humedad,
            mediana_humedad, MAD_humedad, cve_mediana_humedad),
  row.names = c("Promedio", "Varianza", "Desv_estandar", "cve_media",
                "Mediana", "MAD", "cve_mediana")
)

# Mostrar resumen
resumen_humedad
##                     Valor
## Promedio        582.36000
## Varianza      39031.94939
## Desv_estandar   197.56505
## cve_media        33.92490
## Mediana         609.50000
## MAD             221.64870
## cve_mediana      36.36566
# Calcular estadísticas para la variable Lluvia_mm
media_lluvia        <- mean(muestra50$Lluvia_mm, na.rm = TRUE)
varianza_lluvia     <- var(muestra50$Lluvia_mm, na.rm = TRUE)
sd_lluvia           <- sd(muestra50$Lluvia_mm, na.rm = TRUE)
cve_media_lluvia    <- 100 * sd_lluvia / media_lluvia
mediana_lluvia      <- median(muestra50$Lluvia_mm, na.rm = TRUE)
MAD_lluvia          <- mad(muestra50$Lluvia_mm, na.rm = TRUE)
cve_mediana_lluvia  <- 100 * MAD_lluvia / mediana_lluvia

# Crear data.frame con los resultados
resumen_lluvia <- data.frame(
  Valor = c(media_lluvia, varianza_lluvia, sd_lluvia, cve_media_lluvia,
            mediana_lluvia, MAD_lluvia, cve_mediana_lluvia),
  row.names = c("Promedio", "Varianza", "Desv_estandar", "cve_media",
                "Mediana", "MAD", "cve_mediana")
)

# Mostrar resumen
resumen_lluvia
##                      Valor
## Promedio         1481.3400
## Varianza      1442161.1269
## Desv_estandar    1200.9001
## cve_media          81.0685
## Mediana          1101.0000
## MAD              1190.5278
## cve_mediana       108.1315
# Cambiar el nombre de la columna problemática
names(muestra50)[9] <- "Materia_Orgánica_del_Suelo"

# Evitar notación científica
options(scipen = 999)

# Calcular estadísticas para la variable Materia_Orgánica_del_Suelo_%
media_mos        <- mean(muestra50$Materia_Orgánica_del_Suelo, na.rm = TRUE)
varianza_mos     <- var(muestra50$Materia_Orgánica_del_Suelo, na.rm = TRUE)
sd_mos           <- sd(muestra50$Materia_Orgánica_del_Suelo, na.rm = TRUE)
cve_media_mos    <- 100 * sd_mos / media_mos
mediana_mos      <- median(muestra50$Materia_Orgánica_del_Suelo, na.rm = TRUE)
MAD_mos          <- mad(muestra50$Materia_Orgánica_del_Suelo, na.rm = TRUE)
cve_mediana_mos  <- 100 * MAD_mos / mediana_mos
# Crear data.frame con los resultados

resumen_mos <- data.frame(
  Valor = c(media_mos, varianza_mos, sd_mos, cve_media_mos,
            mediana_mos, MAD_mos, cve_mediana_mos),
  row.names = c("Promedio", "Varianza", "Desv_estandar", "cve_media",
                "Mediana", "MAD", "cve_mediana")
)
# Crear data.frame con los resultados
resumen_mos
##                      Valor
## Promedio         459.38000
## Varianza      102775.09755
## Desv_estandar    320.58555
## cve_media         69.78657
## Mediana          361.00000
## MAD              423.28230
## cve_mediana      117.25271

Resumen estadístico Basico

summary(muestra50$Concentracion)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      94    3772    8846    8522   12758   19858
summary(muestra50$Temperatura_C)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   102.0   202.2   274.0   267.9   336.2   444.0
summary(muestra50$Suelo_pH)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    49.0   537.2   652.5   630.1   787.5   849.0
summary(muestra50$Humedad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   218.0   433.0   609.5   582.4   725.8   936.0
summary(muestra50$Lluvia_mm)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      26     492    1101    1481    2200    3892
summary(muestra50$Materia_Orgánica_del_Suelo)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    19.0   174.8   361.0   459.4   736.5   987.0

Medidas de posición

min_muestra50 <- min(muestra50$Concentracion)
min_muestra50
## [1] 94
max_muestra50 <- max(muestra50$Concentracion)
max_muestra50
## [1] 19858
range(muestra50$Concentracion)
## [1]    94 19858
rango_muestra50=max(muestra50$Concentracion)-min(muestra50$Concentracion)
cuartiles_muestra50 <- quantile(muestra50$Concentracion,probs = seq(0,1,by=0.25))
cuartiles_muestra50
##       0%      25%      50%      75%     100% 
##    94.00  3771.50  8846.50 12758.25 19858.00
#Cuartil 3 - Cuartil !
rango_intercuartil_muestra50<- IQR(muestra50$Concentracion)
rango_intercuartil_muestra50
## [1] 8986.75
Medidas_Posic=data.frame("Medidas de posición"=c(min(muestra50$Concentracion),max(muestra50$Concentracion),max(muestra50$Concentracion)-min(muestra50$Concentracion),quantile(muestra50$Concentracion,probs = seq(0,1,by=0.25)),IQR(muestra50$Concentracion)))
rownames(Medidas_Posic)=c("Mínimo","Máximo","Rango","Cuartil0_min","Cuartil_1","Cuartil_2","Cuartil_3","Cuartil_4_max","IQR")
Medidas_Posic
##               Medidas.de.posición
## Mínimo                      94.00
## Máximo                   19858.00
## Rango                    19764.00
## Cuartil0_min                94.00
## Cuartil_1                 3771.50
## Cuartil_2                 8846.50
## Cuartil_3                12758.25
## Cuartil_4_max            19858.00
## IQR                       8986.75
min_muestra50 <- min(muestra50$Temperatura_C)
min_muestra50
## [1] 102
max_muestra50 <- max(muestra50$Temperatura_C)
max_muestra50
## [1] 444
range(muestra50$Temperatura_C)
## [1] 102 444
rango_muestra50 <- max(muestra50$Temperatura_C) - min(muestra50$Temperatura_C)
cuartiles_muestra50 <- quantile(muestra50$Temperatura_C, probs = seq(0, 1, by = 0.25))
cuartiles_muestra50
##     0%    25%    50%    75%   100% 
## 102.00 202.25 274.00 336.25 444.00
# Cálculo del Rango Intercuartílico (IQR = Cuartil 3 - Cuartil 1)
rango_intercuartil_muestra50 <- IQR(muestra50$Temperatura_C)
rango_intercuartil_muestra50
## [1] 134
# Creación del data frame con las medidas de posición
Medidas_Posic <- data.frame(
  "Medidas de posición" = c(
    min(muestra50$Temperatura_C),
    max(muestra50$Temperatura_C),
    max(muestra50$Temperatura_C) - min(muestra50$Temperatura_C),
    quantile(muestra50$Temperatura_C, probs = seq(0, 1, by = 0.25)),
    IQR(muestra50$Temperatura_C)
  )
)

rownames(Medidas_Posic) <- c("Mínimo", "Máximo", "Rango", 
                            "Cuartil0_min", "Cuartil_1", "Cuartil_2", 
                            "Cuartil_3", "Cuartil_4_max", "IQR")

Medidas_Posic
##               Medidas.de.posición
## Mínimo                     102.00
## Máximo                     444.00
## Rango                      342.00
## Cuartil0_min               102.00
## Cuartil_1                  202.25
## Cuartil_2                  274.00
## Cuartil_3                  336.25
## Cuartil_4_max              444.00
## IQR                        134.00
min_muestra50 <- min(muestra50$Suelo_pH)
min_muestra50
## [1] 49
max_muestra50 <- max(muestra50$Suelo_pH)
max_muestra50
## [1] 849
range(muestra50$Suelo_pH)
## [1]  49 849
rango_muestra50=max(muestra50$Suelo_pH)-min(muestra50$Suelo_pH)
cuartiles_muestra50 <- quantile(muestra50$Suelo_pH,probs = seq(0,1,by=0.25))
cuartiles_muestra50
##     0%    25%    50%    75%   100% 
##  49.00 537.25 652.50 787.50 849.00
#Cuartil 3 - Cuartil 1
rango_intercuartil_muestra50<- IQR(muestra50$Suelo_pH)
rango_intercuartil_muestra50
## [1] 250.25
Medidas_Posic=data.frame("Medidas de posición"=c(min(muestra50$Suelo_pH),max(muestra50$Suelo_pH),max(muestra50$Suelo_pH)-min(muestra50$Suelo_pH),quantile(muestra50$Suelo_pH,probs = seq(0,1,by=0.25)),IQR(muestra50$Suelo_pH)))
rownames(Medidas_Posic)=c("Mínimo","Máximo","Rango","Cuartil0_min","Cuartil_1","Cuartil_2","Cuartil_3","Cuartil_4_max","IQR")
Medidas_Posic
##               Medidas.de.posición
## Mínimo                      49.00
## Máximo                     849.00
## Rango                      800.00
## Cuartil0_min                49.00
## Cuartil_1                  537.25
## Cuartil_2                  652.50
## Cuartil_3                  787.50
## Cuartil_4_max              849.00
## IQR                        250.25
min_muestra50 <- min(muestra50$Humedad)
min_muestra50
## [1] 218
max_muestra50 <- max(muestra50$Humedad)
max_muestra50
## [1] 936
range(muestra50$Humedad)
## [1] 218 936
rango_muestra50=max(muestra50$Humedad)-min(muestra50$Humedad)
cuartiles_muestra50 <- quantile(muestra50$Humedad,probs = seq(0,1,by=0.25))
cuartiles_muestra50
##     0%    25%    50%    75%   100% 
## 218.00 433.00 609.50 725.75 936.00
#Cuartil 3 - Cuartil 1
rango_intercuartil_muestra50<- IQR(muestra50$Humedad)
rango_intercuartil_muestra50
## [1] 292.75
Medidas_Posic=data.frame("Medidas de posición"=c(min(muestra50$Humedad),max(muestra50$Humedad),max(muestra50$Humedad)-min(muestra50$Humedad),quantile(muestra50$Humedad,probs = seq(0,1,by=0.25)),IQR(muestra50$Humedad)))
rownames(Medidas_Posic)=c("Mínimo","Máximo","Rango","Cuartil0_min","Cuartil_1","Cuartil_2","Cuartil_3","Cuartil_4_max","IQR")
Medidas_Posic
##               Medidas.de.posición
## Mínimo                     218.00
## Máximo                     936.00
## Rango                      718.00
## Cuartil0_min               218.00
## Cuartil_1                  433.00
## Cuartil_2                  609.50
## Cuartil_3                  725.75
## Cuartil_4_max              936.00
## IQR                        292.75
min_muestra50 <- min(muestra50$Lluvia_mm)
min_muestra50
## [1] 26
max_muestra50 <- max(muestra50$Lluvia_mm)
max_muestra50
## [1] 3892
range(muestra50$Lluvia_mm)
## [1]   26 3892
rango_muestra50=max(muestra50$Lluvia_mm)-min(muestra50$Lluvia_mm)
cuartiles_muestra50 <- quantile(muestra50$Lluvia_mm,probs = seq(0,1,by=0.25))
cuartiles_muestra50
##     0%    25%    50%    75%   100% 
##   26.0  492.0 1101.0 2199.5 3892.0
#Cuartil 3 - Cuartil 1
rango_intercuartil_muestra50<- IQR(muestra50$Lluvia_mm)
rango_intercuartil_muestra50
## [1] 1707.5
Medidas_Posic=data.frame("Medidas de posición"=c(min(muestra50$Lluvia_mm),max(muestra50$Lluvia_mm),max(muestra50$Lluvia_mm)-min(muestra50$Lluvia_mm),quantile(muestra50$Lluvia_mm,probs = seq(0,1,by=0.25)),IQR(muestra50$Lluvia_mm)))
rownames(Medidas_Posic)=c("Mínimo","Máximo","Rango","Cuartil0_min","Cuartil_1","Cuartil_2","Cuartil_3","Cuartil_4_max","IQR")
Medidas_Posic
##               Medidas.de.posición
## Mínimo                       26.0
## Máximo                     3892.0
## Rango                      3866.0
## Cuartil0_min                 26.0
## Cuartil_1                   492.0
## Cuartil_2                  1101.0
## Cuartil_3                  2199.5
## Cuartil_4_max              3892.0
## IQR                        1707.5
min_muestra50 <- min(muestra50$Materia_Orgánica_del_Suelo)
min_muestra50
## [1] 19
max_muestra50 <- max(muestra50$Materia_Orgánica_del_Suelo)
max_muestra50
## [1] 987
range(muestra50$Materia_Orgánica_del_Suelo)
## [1]  19 987
rango_muestra50=max(muestra50$Materia_Orgánica_del_Suelo)-min(muestra50$Materia_Orgánica_del_Suelo)
cuartiles_muestra50 <- quantile(muestra50$Materia_Orgánica_del_Suelo,probs = seq(0,1,by=0.25))
cuartiles_muestra50
##     0%    25%    50%    75%   100% 
##  19.00 174.75 361.00 736.50 987.00
#Cuartil 3 - Cuartil 1
rango_intercuartil_muestra50<- IQR(muestra50$Materia_Orgánica_del_Suelo)
rango_intercuartil_muestra50
## [1] 561.75
Medidas_Posic=data.frame("Medidas de posición"=c(min(muestra50$Materia_Orgánica_del_Suelo),max(muestra50$Materia_Orgánica_del_Suelo),max(muestra50$Materia_Orgánica_del_Suelo)-min(muestra50$Materia_Orgánica_del_Suelo),quantile(muestra50$Materia_Orgánica_del_Suelo,probs = seq(0,1,by=0.25)),IQR(muestra50$Materia_Orgánica_del_Suelo)))
rownames(Medidas_Posic)=c("Mínimo","Máximo","Rango","Cuartil0_min","Cuartil_1","Cuartil_2","Cuartil_3","Cuartil_4_max","IQR")
Medidas_Posic
##               Medidas.de.posición
## Mínimo                      19.00
## Máximo                     987.00
## Rango                      968.00
## Cuartil0_min                19.00
## Cuartil_1                  174.75
## Cuartil_2                  361.00
## Cuartil_3                  736.50
## Cuartil_4_max              987.00
## IQR                        561.75

Diagrama circular 3d y diagrama de barras

# Tabla de frecuencia por región
tabla_region <- table(muestra50$Región)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_region), name = "Spectral")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_region,
  radius = 0.9,
  main = "Distribución de registros por Región",
  labels = names(tabla_region),
  explode = 0.1,
  col = colores,
  border = "black",
  labelcex = 0.7
)

# Tabla de frecuencia por contaminante
tabla_contaminante <- table(muestra50$Tipo_de_Contaminante)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_contaminante), name = "BrBG")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_contaminante,
  radius = 0.9,
  main = "Tipo de contaminante presente en el suelo",
  labels = names(tabla_contaminante),
  explode = 0.1,
  col = colores,
  border = "white",
  labelcex = 0.7
)

# Tabla de frecuencia por Industria_Cercana
tabla_Industria_Cercana <- table(muestra50$Industria_Cercana)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_Industria_Cercana), name = "PiYG")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_Industria_Cercana,
  radius = 0.9,
  main = "Presencia de Industrias Cercanas en la Zona",
  labels = names(tabla_Industria_Cercana),
  explode = 0.1,
  col = colores,
  border = "white",
  labelcex = 0.7
)

# Tabla de frecuencia por Enfermedad
tabla_Enfermedad <- table(muestra50$Tipo_de_Enfermedad.)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_Enfermedad), name = "Dark2")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_Enfermedad,
  radius = 0.9,
  main = "Tipo de Enfermedad que padece la población",
  labels = names(tabla_Enfermedad),
  explode = 0.1,
  col = colores,
  border = "blue",
  labelcex = 0.7
)

# Tabla de frecuencia por severidad de enfermedad
tabla_Severidad_de_Enfermedad <- table(muestra50$Severidad_de_Enfermedad)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_Severidad_de_Enfermedad), name = "BuGn")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_Severidad_de_Enfermedad,
  radius = 0.9,
  main = "Severidad de la Enfermedad que padece la población",
  labels = names(tabla_Severidad_de_Enfermedad),
  explode = 0.1,
  col = colores,
  border = "green",
  labelcex = 0.7
)

# Tabla de frecuencia por contaminante
tabla_Género <- table(muestra50$Género_más_afectado)

# Obtener colores de RColorBrewer
colores <- brewer.pal(n = length(tabla_Género), name = "BuPu")

# Gráfico de pastel 3D con colores RColorBrewer
pie3D(
  tabla_Género,
  radius = 0.9,
  main = "Tipo de Genero más afectado",
  labels = names(tabla_Género),
  explode = 0.1,
  col = colores,
  border = "white",
  labelcex = 0.7
)

barplot(table(muestra50$Región),col="#66CDAA",main="Frecuencias de la variable Región")

barplot(table(muestra50$Tipo_de_Contaminante),col="#E066FF",main="Frecuencias de la variable tipo de contaminante")

barplot(table(muestra50$Industria_Cercana),col="#FFE7BA",main="Frecuencias de la variable Industria cercana")

barplot(table(muestra50$Tipo_de_Enfermedad.),
        col = "#87CEFF",
        main = "Frecuencias de la variable Tipo de Enfermedad",
         cex.names = 0.6,
        las = 1,              # Gira las etiquetas de eje y
        horiz = TRUE)         # Gráfico horizontal

barplot(table(muestra50$Severidad_de_Enfermedad), 
        col = "#FFB90F", 
        main = "Frecuencias de la variable Severidad de Enfermedad")

barplot(table(muestra50$Género_más_afectado), 
        col = "#458B00", 
        main = "Frecuencias de la variable Género más afectado")

Histograma de frecuencias absolutas

hist(muestra50$Concentracion,col="#556B2F",freq=F,main="Distribución de frecuencias de la concentración de contaminantes",xlab="Concentración",ylab="Frecuencias")

hist(muestra50$Suelo_pH,col="#AB82FF",freq=F,main="Distribución de frecuencias de la concentración de pH en el suelo",xlab="Concentración",ylab="Frecuencias")

hist(muestra50$Temperatura_C,col="#E0EEE0",freq=F,main="Distribución de frecuencias de la Temperatura C°",xlab="Concentración",ylab="Frecuencias")

hist(muestra50$Humedad,col="#EE1289",freq=F,main="Distribución de frecuencias de la Humedad",xlab="Concentración",ylab="Frecuencias")

hist(muestra50$Lluvia_mm,col="#00CDCD",freq=F,main="Distribución de frecuencias de la Lluvia",xlab="Concentración",ylab="Frecuencias")

hist(muestra50$Materia_Orgánica_del_Suelo,col="#FFE4E1",freq=F,main="Distribución de frecuencias de la concentración de Materia Orgánica",xlab="Concentración",ylab="Frecuencias")

Diagrama de caja

boxplot(muestra50$Concentracion,col="#8B5F65",ylab="Concentraciodel contaminante",main="Diagrama de caja de Concentración")
stripchart(muestra50$Concentracion, method = "jitter", pch = 16, add = TRUE, col = "red", cex = 0.3, vertical = TRUE)

boxplot(muestra50$Suelo_pH,col="#FFA07A",ylab="pH del",main="Diagrama de caja de Suelo pH")
stripchart(muestra50$Suelo_pH, method = "jitter", pch = 16, add = TRUE, col = "yellow", cex = 0.3, vertical = TRUE)

boxplot(muestra50$Temperatura_C,col="#6B8E23",ylab="Temperatura C°",main="Diagrama de caja de Temperatura C°")
stripchart(muestra50$Temperatura_C, method = "jitter", pch = 16, add = TRUE, col = "brown", cex = 0.3, vertical = TRUE)

boxplot(muestra50$Humedad,col="#A4D3EE",ylab="Humedad",main="Diagrama de caja de Humedad ")
stripchart(muestra50$Humedad, method = "jitter", pch = 16, add = TRUE, col = "green", cex = 0.3, vertical = TRUE)

boxplot(muestra50$Lluvia_mm,col="#CD6839",ylab="Lluvia",main="Diagrama de caja de LLuvia")
stripchart(muestra50$Lluvia_mm, method = "jitter", pch = 16, add = TRUE, col = "black", cex = 0.3, vertical = TRUE)

boxplot(muestra50$Materia_Orgánica_del_Suelo,col="#FF00FF",ylab="Materia orgánica",main="Diagrama de caja de  Materia orgánica del suelo")
stripchart(muestra50$Materia_Orgánica_del_Suelo, method = "jitter", pch = 16, add = TRUE, col = "blue", cex = 0.3, vertical = TRUE)

boxplot(muestra50$Suelo_pH~ muestra50$Tipo_de_Contaminante,col="#FFE4E1",ylab="Suelo pH",main="Diagrama de caja de Suelo pH")
stripchart(muestra50$Suelo_pH~ muestra50$Tipo_de_Contaminante, method = "jitter", pch = 12, add = TRUE, col = "#6A5ACD", vertical = TRUE)

boxplot(muestra50$Concentracion~ muestra50$Tipo_de_Enfermedad.,col="#00E5EE",ylab="Suelo pH",main="Diagrama de caja de Concentración del contaminante")
stripchart(muestra50$Concentracion~ muestra50$Tipo_de_Enfermedad., method = "jitter", pch = 12, add = TRUE, col = "#EE3A8C", vertical = TRUE)

##Tablas de contingencia, conteos, proporción, porcentajes con respecto al total, porcentajes por fila y porcentajes por columna, diagramas de barras bivariados

# 1. Crear tabla cruzada y proporciones
TablaCruzada <- table(muestra50$Región, muestra50$Tipo_de_Contaminante)
TablaCruzada_propFilas <- prop.table(TablaCruzada, margin = 1)
TablaCruzada_propColumnas <- prop.table(TablaCruzada, margin = 2)

# 2. Definir colores (tantos como regiones)
colores <- rainbow(nrow(TablaCruzada))  # 1 color por región

# 3. Gráfico 1: Barras apiladas con etiquetas verticales
par(mfrow = c(1, 2), mar = c(8, 4, 4, 2))  # espacio para etiquetas

barplot(TablaCruzada,
        col = colores,
        las = 2,              # etiquetas verticales
        cex.names = 0.8,
        main = "Frecuencia de Contaminantes por Región",
        ylab = "Frecuencia")

legend("topright", legend = rownames(TablaCruzada), fill = colores, cex = 0.8)

# 4. Gráfico 2: Mosaicplot claro y proporcionado
mosaicplot(TablaCruzada,
           color = colores,
           cex.axis = 0.4,
           main = " Región vs Contaminante",
           las = 1)

# Asegúrate de tener la tabla
TablaCruzada <- table(muestra50$Región, muestra50$Tipo_de_Contaminante)
TablaCruzada_propColumnas <- prop.table(TablaCruzada, margin = 2)

# Define colores (tantos como regiones)
colores6 <- rainbow(nrow(TablaCruzada))  # o usa tus propios colores

# Crear gráfico de proporciones por columna (apilado)
par(mfrow = c(1, 1), mar = c(8, 4, 4, 2))  # margen inferior ampliado para etiquetas

barplot(TablaCruzada_propColumnas,
        col = colores6,
        las = 2,            # etiquetas verticales en eje X
        cex.names = 0.8,
        main = "Proporción por Tipo de Contaminante (columnas)",
        ylab = "Proporción")

legend("topright", legend = rownames(TablaCruzada), fill = colores6, cex = 0.8)

# 1. Crear tabla cruzada y proporciones
TablaCruzada2 <- table(muestra50$Industria_Cercana, muestra50$Tipo_de_Enfermedad.)
TablaCruzada2_propFilas <- prop.table(TablaCruzada2, margin = 1)
TablaCruzada2_propColumnas <- prop.table(TablaCruzada2, margin = 2)
# Por ejemplo con RColorBrewer
library(RColorBrewer)
colores <- brewer.pal(n = min(nrow(TablaCruzada2), 8), name = "Set2")

# Gráfico de barras
par(mfrow = c(1, 2), mar = c(8, 4, 4, 2))

barplot(TablaCruzada2,
        col = colores,
        las = 2,
        cex.names = 0.8,
        main = "Frecuencia de Enfermedades por Industria cercana",
        ylab = "Frecuencia")

legend("topright", legend = rownames(TablaCruzada2), fill = colores, cex = 0.8)

# Mosaico
mosaicplot(TablaCruzada2,
           color = colores,
           cex.axis = 0.4,
           main = "Industria vs Enfermedad",
           las = 1)

# Gráfico de proporciones por columnas
par(mfrow = c(1, 1), mar = c(8, 4, 4, 2))

barplot(prop.table(TablaCruzada2, margin = 2),
        col = colores,
        las = 2,
        cex.names = 0.8,
        main = "Proporción por Tipo de Industria (columnas)",
        ylab = "Proporción")

legend("topright", legend = rownames(TablaCruzada2), fill = colores, cex = 0.8)

# 1. Crear tabla cruzada y proporciones
TablaCruzada3 <- table(muestra50$Severidad_de_Enfermedad , muestra50$Género_más_afectado)
TablaCruzada3_propFilas <- prop.table(TablaCruzada3, margin = 1)
TablaCruzada3_propColumnas <- prop.table(TablaCruzada3, margin = 2)
# Por ejemplo con RColorBrewer
library(RColorBrewer)
colores <- brewer.pal(n = min(nrow(TablaCruzada3), 8), name = "Dark2")

# Gráfico de barras
par(mfrow = c(1, 2), mar = c(8, 4, 4, 2))

barplot(TablaCruzada3,
        col = colores,
        las = 2,
        cex.names = 0.8,
        main = "Frecuencia de Enfermedades por Industria cercana",
        ylab = "Frecuencia")

legend("topright", legend = rownames(TablaCruzada3), fill = colores, cex = 0.8)

# Mosaico
mosaicplot(TablaCruzada3,
           color = colores,
           cex.axis = 0.7,
           main = "Industria vs Enfermedad",
           las = 1)

# Gráfico de proporciones por columnas
par(mfrow = c(1, 1), mar = c(8, 4, 4, 2))

barplot(prop.table(TablaCruzada3, margin = 2),
        col = colores,
        las = 2,
        cex.names = 0.8,
        main = "Proporción por Tipo de Industria (columnas)",
        ylab = "Proporción")

legend("topright", legend = rownames(TablaCruzada3), fill = colores, cex = 0.8)

Diagramas de dispersión generales y por grupos

plot(muestra50$Concentracion,
     muestra50$Suelo_pH,
     main = "Diagrama de Dispersión: Concentración vs Suelo pH",
     xlab = "Concentración",
     ylab = "Suelo pH",
     col = "blue",        # color de los puntos
     pch = 19,            # tipo de punto sólido
     cex = 1.2,           # tamaño del punto
     bg = "lightblue")    

plot(muestra50$Temperatura_C,
     muestra50$Humedad,
     main = "Diagrama de Dispersión: Temperatura C° vs Humedad",
     xlab = "Temperatura C°",
     ylab = "Humedad",
     col = "#40E0D0",        # color de los puntos
     pch = 19,            # tipo de punto sólido
     cex = 1.2,           # tamaño del punto
     bg = "lightblue")   

plot(muestra50$Lluvia_mm,
     muestra50$Materia_Orgánica_del_Suelo,
     main = "Diagrama de Dispersión: Lluvia vs Materia Orgánica del Suelo",
     xlab = "Lluvia",
     ylab = "Materia Orgánica del Suelo",
     col = "#FF3E96",        # color de los puntos
     pch = 19,            # tipo de punto sólido
     cex = 1.2,           # tamaño del punto
     bg = "lightblue")   

Matrices de diagramas de dispersión generales y por grupos. Diferentes gráficos en la diagonal, diagramas de caja, histogramas, densidades.

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = muestra50,
                  diagonal = list(method = "boxplot"))

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = muestra50,
                  diagonal = list(method = "histogram"))

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = muestra50, groups=muestra50$Región, by.groups=T)
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth
## Warning in smoother(x[subs], y[subs], col = smoother.args$col[i], log.x =
## FALSE, : could not fit smooth

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = muestra50, groups=muestra50$Tipo_de_Contaminante, by.groups=T)

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = muestra50, groups=muestra50$Industria_Cercana, by.groups=T)

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = muestra50, groups=muestra50$Tipo_de_Enfermedad., by.groups=T)

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = muestra50, groups=muestra50$Severidad_de_Enfermedad, by.groups=T)

scatterplotMatrix(~ Concentracion + Suelo_pH + Temperatura_C + Humedad + Lluvia_mm + `Materia_Orgánica_del_Suelo`, 
                  data = muestra50, groups=muestra50$Género_más_afectado, by.groups=T)

Matrices de covarianza y correlación

MatrizCor <- cor(muestra50[, c(3, 4, 5, 6, 7, 9)])
MatrizCor
##                            Concentracion    Suelo_pH Temperatura_C     Humedad
## Concentracion                  1.0000000  0.25963914   -0.10320199 -0.13290964
## Suelo_pH                       0.2596391  1.00000000    0.07516461  0.20571126
## Temperatura_C                 -0.1032020  0.07516461    1.00000000 -0.03908819
## Humedad                       -0.1329096  0.20571126   -0.03908819  1.00000000
## Lluvia_mm                      0.1753748 -0.10017351    0.08000613 -0.06838996
## Materia_Orgánica_del_Suelo    -0.0886731 -0.26543464   -0.20661093 -0.18595552
##                              Lluvia_mm Materia_Orgánica_del_Suelo
## Concentracion               0.17537485                -0.08867310
## Suelo_pH                   -0.10017351                -0.26543464
## Temperatura_C               0.08000613                -0.20661093
## Humedad                    -0.06838996                -0.18595552
## Lluvia_mm                   1.00000000                -0.07499781
## Materia_Orgánica_del_Suelo -0.07499781                 1.00000000
MatrizCov=cov(muestra50[, c(3, 4, 5, 6, 7, 9)])
MatrizCov
##                            Concentracion   Suelo_pH Temperatura_C      Humedad
## Concentracion                30911609.69 279332.574   -54022.4629 -145991.4482
## Suelo_pH                       279332.57  37443.912     1369.3976    7864.2767
## Temperatura_C                  -54022.46   1369.398     8864.4343    -727.0784
## Humedad                       -145991.45   7864.277     -727.0784   39031.9494
## Lluvia_mm                     1170941.01 -23278.252     9045.9804  -16225.9208
## Materia_Orgánica_del_Suelo    -158050.78 -16466.153    -6236.2392  -11777.7722
##                             Lluvia_mm Materia_Orgánica_del_Suelo
## Concentracion              1170941.01                -158050.779
## Suelo_pH                    -23278.25                 -16466.153
## Temperatura_C                 9045.98                  -6236.239
## Humedad                     -16225.92                 -11777.772
## Lluvia_mm                  1442161.13                 -28873.499
## Materia_Orgánica_del_Suelo  -28873.50                 102775.098
MatrizVar=var(muestra50[, c(3, 4, 5, 6, 7, 9)])
MatrizVar
##                            Concentracion   Suelo_pH Temperatura_C      Humedad
## Concentracion                30911609.69 279332.574   -54022.4629 -145991.4482
## Suelo_pH                       279332.57  37443.912     1369.3976    7864.2767
## Temperatura_C                  -54022.46   1369.398     8864.4343    -727.0784
## Humedad                       -145991.45   7864.277     -727.0784   39031.9494
## Lluvia_mm                     1170941.01 -23278.252     9045.9804  -16225.9208
## Materia_Orgánica_del_Suelo    -158050.78 -16466.153    -6236.2392  -11777.7722
##                             Lluvia_mm Materia_Orgánica_del_Suelo
## Concentracion              1170941.01                -158050.779
## Suelo_pH                    -23278.25                 -16466.153
## Temperatura_C                 9045.98                  -6236.239
## Humedad                     -16225.92                 -11777.772
## Lluvia_mm                  1442161.13                 -28873.499
## Materia_Orgánica_del_Suelo  -28873.50                 102775.098

Conclusiones

Conclusiones Generales

A partir del análisis de los diferentes gráficos y representaciones estadísticas, se obtuvieron las siguientes conclusiones:

Diagramas Circulares 3D y Diagramas de Barras En la mayoría de los gráficos, incluso con una base de 3.000 datos, se observa una distribución relativamente uniforme. Sin embargo, existen excepciones importantes. Por ejemplo, en la variable Severidad de la enfermedad que padece la población, el porcentaje correspondiente a casos graves es notablemente mayor. Asimismo, en la variable Tipo de género más afectado, ambos géneros presentan porcentajes elevados, sin una diferencia marcada entre ellos.

Tablas de Frecuencia Las tablas de frecuencia tienden a mostrar una distribución similar entre sí, independientemente del valor máximo que puedan presentar. Esto sugiere una homogeneidad general en la dispersión de los datos categóricos.

Histogramas de Frecuencia Absoluta

Concentración de Contaminante: Se observa que a menor concentración, mayor es la frecuencia absoluta, lo que indica una alta presencia de valores bajos en la muestra.

Concentración de pH en el Suelo: En los intervalos con concentraciones mayores a 100 y menores a 450, no se registran frecuencias absolutas, lo cual representa una discontinuidad en la distribución.

Concentración de Materia Orgánica: Se repite el patrón donde a menor concentración, mayor es la frecuencia absoluta.

En general, en algunas variables se observa que las frecuencias tienden a ser similares independientemente de la concentración, lo que indica una posible distribución uniforme en ciertos casos.

Diagramas de Caja La mayoría de los diagramas de caja presentan una dispersión de datos similar. No obstante, se identifican diferencias significativas en dos casos:

Diagrama de Caja de pH del Suelo: Se evidencia una discontinuidad o espacio vacío en un intervalo específico de concentración, lo que sugiere ausencia de datos en ese rango.

Esta misma situación se repite en otro gráfico relacionado con el pH del suelo, reforzando la presencia de un patrón irregular en la distribución de esta variable.

Variables Cualitativas Las tablas correspondientes a las variables cualitativas muestran una distribución equitativa entre las distintas categorías, lo cual indica una representación balanceada dentro de los datos analizados.