install.packages("car") 
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(car)
## Loading required package: carData
# Instalar la librería ggplot2 si aún no la tienes
install.packages("ggplot2")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
# Cargar la librería ggplot2 para visualización
library(ggplot2)
# Datos de los tres grupos
empleados <- c(6.4, 6.6, 6.8, 6.9, 9.5, 6.1, 7.5, 8.2, 4.1, 5.5)
agricultores <- c(6.5, 6.8, 7.0, 7.1, 9.7, 6.2, 7.7, 8.4, 4.2, 5.6)

no_expuestos <- c(7.3, 7.5, 7.8, 7.9, 10.8, 6.9, 8.5, 9.4, 4.6, 6.3)

# Crear una tabla (data frame) 
datos <- data.frame(
  Grupo = c(rep("Empleados", length(empleados)), 
            rep("Agricultores", length(agricultores)), 
            rep("No Expuestos", length(no_expuestos))),
  Acetilcolinesterasa = c(empleados, agricultores, no_expuestos)
)

# Mostrar el data frame
print(datos)
##           Grupo Acetilcolinesterasa
## 1     Empleados                 6.4
## 2     Empleados                 6.6
## 3     Empleados                 6.8
## 4     Empleados                 6.9
## 5     Empleados                 9.5
## 6     Empleados                 6.1
## 7     Empleados                 7.5
## 8     Empleados                 8.2
## 9     Empleados                 4.1
## 10    Empleados                 5.5
## 11 Agricultores                 6.5
## 12 Agricultores                 6.8
## 13 Agricultores                 7.0
## 14 Agricultores                 7.1
## 15 Agricultores                 9.7
## 16 Agricultores                 6.2
## 17 Agricultores                 7.7
## 18 Agricultores                 8.4
## 19 Agricultores                 4.2
## 20 Agricultores                 5.6
## 21 No Expuestos                 7.3
## 22 No Expuestos                 7.5
## 23 No Expuestos                 7.8
## 24 No Expuestos                 7.9
## 25 No Expuestos                10.8
## 26 No Expuestos                 6.9
## 27 No Expuestos                 8.5
## 28 No Expuestos                 9.4
## 29 No Expuestos                 4.6
## 30 No Expuestos                 6.3
# Convertir la columna 'Grupo' a factor
datos$Grupo <- as.factor(datos$Grupo)

# Mostrar el data frame con la columna 'Grupo' ya como factor
print(datos)
##           Grupo Acetilcolinesterasa
## 1     Empleados                 6.4
## 2     Empleados                 6.6
## 3     Empleados                 6.8
## 4     Empleados                 6.9
## 5     Empleados                 9.5
## 6     Empleados                 6.1
## 7     Empleados                 7.5
## 8     Empleados                 8.2
## 9     Empleados                 4.1
## 10    Empleados                 5.5
## 11 Agricultores                 6.5
## 12 Agricultores                 6.8
## 13 Agricultores                 7.0
## 14 Agricultores                 7.1
## 15 Agricultores                 9.7
## 16 Agricultores                 6.2
## 17 Agricultores                 7.7
## 18 Agricultores                 8.4
## 19 Agricultores                 4.2
## 20 Agricultores                 5.6
## 21 No Expuestos                 7.3
## 22 No Expuestos                 7.5
## 23 No Expuestos                 7.8
## 24 No Expuestos                 7.9
## 25 No Expuestos                10.8
## 26 No Expuestos                 6.9
## 27 No Expuestos                 8.5
## 28 No Expuestos                 9.4
## 29 No Expuestos                 4.6
## 30 No Expuestos                 6.3
# Ver resumen de los datos
summary(datos)
##           Grupo    Acetilcolinesterasa
##  Agricultores:10   Min.   : 4.100     
##  Empleados   :10   1st Qu.: 6.325     
##  No Expuestos:10   Median : 6.950     
##                    Mean   : 7.127     
##                    3rd Qu.: 7.875     
##                    Max.   :10.800
# Ver resumen de los datos
summary(empleados)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   4.100   6.175   6.700   6.760   7.350   9.500
summary(agricultores)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   4.200   6.275   6.900   6.920   7.550   9.700
summary(no_expuestos)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    4.60    7.00    7.65    7.70    8.35   10.80

#Hipótesis \(H_0:\) No existe diferencia significativa en los niveles promedio de acetilcolinesterasa entre los tres grupos.

\(H_1:\)Existe al menos una diferencia significativa en los niveles promedio de acetilcolinesterasa entre los tres grupos.

#** ANOVA**

#Pruebas de homocedasticidad 
resultado_levene <- leveneTest(Acetilcolinesterasa ~ Grupo, data = datos)

# Mostrar el resultado de la prueba de Levene
print(resultado_levene)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.0626 0.9395
##       27
# Prueba de homocedasticidad (Levene)
resultado_levene <- leveneTest(Acetilcolinesterasa ~ Grupo, data = datos)

# Prueba de normalidad de residuos (Shapiro-Wilk)
modelo_anova <- aov(Acetilcolinesterasa ~ Grupo, data = datos)
residuos <- residuals(modelo_anova)
resultado_shapiro <- shapiro.test(residuos)

# Función para imprimir los resultados de los supuestos
comprobar_supuestos <- function() {
  
  # Homocedasticidad (Levene)
  if (resultado_levene$`Pr(>F)`[1] > 0.05) {
    print("Supuesto de homocedasticidad: Se cumple (las varianzas son iguales)")
  } else {
    print("Supuesto de homocedasticidad: No se cumple (las varianzas son diferentes)")
  }
  
  # Normalidad (Shapiro-Wilk)
  if (resultado_shapiro$p.value > 0.05) {
    print("Supuesto de normalidad: Se cumple (los residuos son normales)")
  } else {
    print("Supuesto de normalidad: No se cumple (los residuos no son normales)")
  }
}

# Imprimir los resultados de los supuestos
comprobar_supuestos()
## [1] "Supuesto de homocedasticidad: Se cumple (las varianzas son iguales)"
## [1] "Supuesto de normalidad: Se cumple (los residuos son normales)"
# Generar el boxplot
ggplot(datos, aes(x = Grupo, y = Acetilcolinesterasa, fill = Grupo)) +
  geom_boxplot() +
  labs(title = "Boxplot de los niveles de Acetilcolinesterasa por Grupo",
       x = "Grupo",
       y = "Niveles de Acetilcolinesterasa") +
  theme_minimal() +
  theme(legend.position = "none")

# Calcular las medias de cada grupo
media_empleados <- mean(empleados)
media_agricultores <- mean(agricultores)
media_no_expuestos <- mean(no_expuestos)

# Calcular la media general
n_total <- length(empleados) + length(agricultores) + length(no_expuestos)
media_general <- (sum(empleados) + sum(agricultores) + sum(no_expuestos)) / n_total

# Calcular SSB (Suma de cuadrados entre grupos)
n_empleados <- length(empleados)
n_agricultores <- length(agricultores)
n_no_expuestos <- length(no_expuestos)

SSB <- (n_empleados * (media_empleados - media_general)^2) +
       (n_agricultores * (media_agricultores - media_general)^2) +
       (n_no_expuestos * (media_no_expuestos - media_general)^2)

# Calcular SSW (Suma de cuadrados dentro de los grupos)
SSW <- sum((empleados - media_empleados)^2) +
       sum((agricultores - media_agricultores)^2) +
       sum((no_expuestos - media_no_expuestos)^2)

# Grados de libertad
k <- 3  # número de grupos
dfB <- k - 1
dfW <- n_total - k

# Calcular medias cuadráticas
MSB <- SSB / dfB
MSW <- SSW / dfW

# Calcular el valor F
F_value <- MSB / MSW

# Comparar con el valor crítico
alpha <- 0.05
valor_critico <- qf(1 - alpha, dfB, dfW)

# Mostrar resultados
cat("Suma de cuadrados entre grupos (SSB):", SSB, "\n")
## Suma de cuadrados entre grupos (SSB): 5.058667
cat("Suma de cuadrados dentro de los grupos (SSW):", SSW, "\n")
## Suma de cuadrados dentro de los grupos (SSW): 65.42
cat("Grados de libertad entre grupos (dfB):", dfB, "\n")
## Grados de libertad entre grupos (dfB): 2
cat("Grados de libertad dentro de los grupos (dfW):", dfW, "\n")
## Grados de libertad dentro de los grupos (dfW): 27
cat("Media cuadrática entre grupos (MSB):", MSB, "\n")
## Media cuadrática entre grupos (MSB): 2.529333
cat("Media cuadrática dentro de los grupos (MSW):", MSW, "\n")
## Media cuadrática dentro de los grupos (MSW): 2.422963
cat("Valor F calculado:", F_value, "\n")
## Valor F calculado: 1.043901
cat("Valor crítico de F:", valor_critico, "\n")
## Valor crítico de F: 3.354131
# Conclusión
if (F_value > valor_critico) {
  cat("Conclusión: Rechazamos la hipótesis nula (H0). Hay diferencias significativas entre las medias de los grupos.\n")
} else {
  cat("Conclusión: No rechazamos la hipótesis nula (H0). No hay diferencias significativas entre las medias de los grupos.\n")
}
## Conclusión: No rechazamos la hipótesis nula (H0). No hay diferencias significativas entre las medias de los grupos.