#install.packages("car") 
library(car)
## Loading required package: carData
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
## 
##     recode
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
#install.packages("ggplot2")

library(ggplot2)

Datos

Los miembros de un equipo ciclista se dividen al azar en tres grupos que entrenan con métodos difernetes. EL primer grupo realiza largos recorridos a ritmo pausado, el segundo grupo realiza series cortas de alta intensidad y el tercero trabaja en el gimnasio con epsas y se ejercita en el pedaleo de alta frecuencia. Después de un mes de entrenamiento se relaiza un test de rendimiento consistente en un recorrido cronometrado de 9 KM, los tiempos empleados son los siguientes

metodo1 <- c(15, 16, 14, 15, 17)
metodo2 <- c(14, 13, 15, 16, 14)
metodo3 <- c(13, 12, 11, 14, 11)

grupo <- factor(rep(c("metodo1", "metodo2", "metodo3"), each = 5))
valores <- c(metodo1, metodo2, metodo3)
df <- data.frame(grupo, valores)
# Ver el data frame
print(df)
##      grupo valores
## 1  metodo1      15
## 2  metodo1      16
## 3  metodo1      14
## 4  metodo1      15
## 5  metodo1      17
## 6  metodo2      14
## 7  metodo2      13
## 8  metodo2      15
## 9  metodo2      16
## 10 metodo2      14
## 11 metodo3      13
## 12 metodo3      12
## 13 metodo3      11
## 14 metodo3      14
## 15 metodo3      11

Descriptivo

# Resumen descriptivo
estadisticas <- df %>%
  group_by(grupo) %>%
  summarise(
    media = mean(valores),
    mediana = median(valores),
    desviacion_estandar = sd(valores),
    varianza = var(valores),
    rango = max(valores) - min(valores),
    min = min(valores),
    max = max(valores)
  )

# Mostrar el resumen
print(estadisticas)
## # A tibble: 3 × 8
##   grupo   media mediana desviacion_estandar varianza rango   min   max
##   <fct>   <dbl>   <dbl>               <dbl>    <dbl> <dbl> <dbl> <dbl>
## 1 metodo1  15.4      15                1.14      1.3     3    14    17
## 2 metodo2  14.4      14                1.14      1.3     3    13    16
## 3 metodo3  12.2      12                1.30      1.7     3    11    14
# Crear el boxplot
ggplot(df, aes(x = grupo, y = valores, fill = grupo)) +
  geom_boxplot() +
  labs(title = "Boxplot de Valores por Grupo",
       x = "Grupo",
       y = "Valores") +
  theme_minimal()

Verificación de supuestos para ANOVA

Normalidad de las muestras

# Prueba de normalidad de Shapiro-Wilk para cada grupo
shapiro_1 <- shapiro.test(metodo1)
shapiro_2 <- shapiro.test(metodo2)
shapiro_3 <- shapiro.test(metodo3)

# Imprimir los resultados
print(shapiro_1)
## 
##  Shapiro-Wilk normality test
## 
## data:  metodo1
## W = 0.96086, p-value = 0.814
print(shapiro_2)
## 
##  Shapiro-Wilk normality test
## 
## data:  metodo2
## W = 0.96086, p-value = 0.814
print(shapiro_3)
## 
##  Shapiro-Wilk normality test
## 
## data:  metodo3
## W = 0.90202, p-value = 0.4211
# Interpretación
interpretacion <- function(resultado) {
  if (resultado$p.value < 0.05) {
    print("Los datos no siguen una distribución normal (se rechaza la normalidad).")
  } else {
    print("Los datos siguen una distribución normal.")
  }
}

# Interpretar los resultados
interpretacion(shapiro_1)
## [1] "Los datos siguen una distribución normal."
interpretacion(shapiro_2)
## [1] "Los datos siguen una distribución normal."
interpretacion(shapiro_3)
## [1] "Los datos siguen una distribución normal."

Homocedasticidad

# Definir los datos
metodo1 <- c(15, 16, 14, 15, 17)
metodo2 <- c(14, 13, 15, 16, 14)
metodo3 <- c(13, 12, 11, 14, 11)

# Combinar los datos en un solo marco de datos
datos <- data.frame(
  valor = c(metodo1, metodo2, metodo3),
  grupo = factor(rep(c("metodo1", "metodo2", "metodo3"), each = length(metodo1)))  # Asignar cada valor a su grupo
)

# Realizar la prueba de Levene
resultado_levene <- leveneTest(valor ~ grupo, data = datos)

# Imprimir el resultado de la prueba
print(resultado_levene)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.1053 0.9009
##       12
# Interpretación de la prueba
p_valor <- resultado_levene$"Pr(>F)"[1]
if (p_valor < 0.05) {
  print("Las varianzas son significativamente diferentes (heterocedasticidad).")
} else {
  print("Las varianzas no son significativamente diferentes (homocedasticidad).")
}
## [1] "Las varianzas no son significativamente diferentes (homocedasticidad)."

Cálculos para la tabla ANOVA

\(H_0: \mu_1 = \mu_2 = \mu_3\) \(H_1:\) Hay por lo menos un método cuyos resultados son diferentes.

#Funciones
SE <- function(y_groups, y_means) {
  # Usamos un bucle for para iterar sobre los grupos
  for (i in seq_along(y_groups)) {
    # Calcular el SE para el grupo actual
    error_cuadrado <- sum((y_groups[[i]] - y_means[[i]])^2)
    
    # Imprimir el resultado con un mensaje personalizado
    print(paste("SE grupo", i, ":", error_cuadrado))
  }
}

SSE <- function(y, group_means) {
  total <- 0
  for (j in 1:length(group_means)) {
    y_group <- y[[j]]  # Observaciones del grupo j
    y_mean_group <- group_means[j]
    total <- total + sum((y_group - y_mean_group)^2)
  }
  return(total)
  
}

SSA <- function(group_means, y_mean_total, n_group) {
  sum(n_group * (group_means - y_mean_total)^2)
}


SST <- function(y, y_mean_total) {
  total <- 0
  for (group in y) {
    total <- total + sum((group - y_mean_total)^2)
  }
  return(total)
}
y <- list(metodo1, metodo2, metodo3)
N_total <-  length(metodo1) + length(metodo2) + length(metodo3)
group_means <- c(mean(y[[1]]), mean(y[[2]]), mean(y[[3]]))
y_mean_total <- mean(unlist(y))
n_group <- sapply(y, length)

SE <- SE(y, group_means)
## [1] "SE grupo 1 : 5.2"
## [1] "SE grupo 2 : 5.2"
## [1] "SE grupo 3 : 6.8"
SSE_total <- SSE(y, group_means)
SSA_total <- SSA(group_means, y_mean_total, n_group)
SST_total <- SST(y, y_mean_total)

K <- length(y)
print(paste("Cantidad de grupos (K):", K))
## [1] "Cantidad de grupos (K): 3"
N_menos_K <- N_total - K
print(paste("N - K es:", N_menos_K))
## [1] "N - K es: 12"
N_menos_1 <- N_total - 1
print(paste("N - 1 es:", N_menos_1))
## [1] "N - 1 es: 14"
MSA <- SSA_total/(K-1)
MSE <- SSE_total/(N_total-K)
F_CALCULADO <- MSA/MSE

# Resultados
#cat("SE: ", SE, "\n")
cat("SSE total: ", SSE_total, "\n")
## SSE total:  17.2
cat("SSA total: ", SSA_total, "\n")
## SSA total:  26.8
cat("SST total: ", SST_total, "\n")
## SST total:  44
print(paste("MSA:", MSA))
## [1] "MSA: 13.4"
print(paste("MSE:", MSE))
## [1] "MSE: 1.43333333333333"
print(paste("F_CALCULADO:", F_CALCULADO))
## [1] "F_CALCULADO: 9.34883720930233"
# Prueba de ANOVA de R
anova_resultado <- aov(valores ~ grupo, data = df)

# Mostrar el resultado de ANOVA
summary(anova_resultado)
##             Df Sum Sq Mean Sq F value  Pr(>F)   
## grupo        2   26.8  13.400   9.349 0.00357 **
## Residuals   12   17.2   1.433                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Probar el planteamiento de las hipotésis

# Paso 1: Crear los datos
metodo1 <- c(15, 16, 14, 15, 17)
metodo2 <- c(14, 13, 15, 16, 14)
metodo3 <- c(13, 12, 11, 14, 11)

# Crear un data frame
df <- data.frame(
  grupo = factor(rep(c("metodo1", "metodo2", "metodo3"), each = 5)),
  valores = c(metodo1, metodo2, metodo3)
)

anova_result <- aov(valores ~ grupo, data = df)

summary(anova_result)
##             Df Sum Sq Mean Sq F value  Pr(>F)   
## grupo        2   26.8  13.400   9.349 0.00357 **
## Residuals   12   17.2   1.433                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#nivel de significancia
alpha <- 0.05

# Obtener el p-valor del ANOVA
p_valor_anova <- summary(anova_result)[[1]][["Pr(>F)"]][1]  # Extraer p-valor

#Comparar el p-valor con alpha
if (p_valor_anova < alpha) {
  decision_anova <- "Rechazamos H0: Hay diferencias significativas entre las medias de los grupos."
} else {
  decision_anova <- "No rechazamos H0: No hay diferencias significativas entre las medias de los grupos."
}

#
print(paste("p-valor ANOVA:", round(p_valor_anova, 4)))
## [1] "p-valor ANOVA: 0.0036"
print(decision_anova)
## [1] "Rechazamos H0: Hay diferencias significativas entre las medias de los grupos."
#Test de Tukey
tukey_result <- TukeyHSD(anova_result)
print(tukey_result)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = valores ~ grupo, data = df)
## 
## $grupo
##                 diff       lwr        upr     p adj
## metodo2-metodo1 -1.0 -3.020074  1.0200738 0.4110998
## metodo3-metodo1 -3.2 -5.220074 -1.1799262 0.0031153
## metodo3-metodo2 -2.2 -4.220074 -0.1799262 0.0328202
#Resultados del test de Tukey
tukey_decision <- ifelse(tukey_result$grupo[,"p adj"] < alpha, 
                          "Hay diferencias significativas entre estos grupos.",
                          "No hay diferencias significativas entre estos grupos.")
print(tukey_decision)
##                                         metodo2-metodo1 
## "No hay diferencias significativas entre estos grupos." 
##                                         metodo3-metodo1 
##    "Hay diferencias significativas entre estos grupos." 
##                                         metodo3-metodo2 
##    "Hay diferencias significativas entre estos grupos."

Respuesta al interrogante de interés

metodo2 - metodo1: Podemos notar que entre el método II y el método I no hay una diferencia sinificativa, esto sucede porque el intervalo va de -3.020074 a 1.0200738, lo cual quiere decir que el 0 se encuentra en este intervalo, esto es, hay un punto en donde hay una “igualdad”. \(\mu_2=\mu_1\)

metodo3 - metodo1: Es claro que existe una diferencia entre el grupo 3 y el grupo 1, pues a diferencia de la comparación anterior, en este intervalo no se encuentra el cero, lo cual indica que no existe “igualdad” en ningún punto para estos grupos. También se puede notar que dicho intervalo solo toma valores negativos, de -5.220074 a -1.1799262, esto indica que el método I en este caso toma valores mayores que el método III, por lo cual \(\mu1 > \mu3\)

metodo3 - metodo2: Sucede el mismo caso que la comparación anterior, a diferencia que aquí la comparativa es entre el método III y el método II, pero los valores también se mantienen en un intervalo negativo, yendo de -4.220074 a -0.1799262 estableciendo en este caso que el método II toma valores más altos que el método III, esto es \(\mu2 > \mu3\)

Concluyendo de manera general, se tiene que según la muestra hay dos métodos superiores, método I y método II, mientras que el método III no produce un resultado tan eficiente. Matematicamente se concluye que

\[\mu_1 = \mu_2 > \mu_3\]