#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)
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
# 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()
# 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."
# 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)."
\(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
# 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."
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\]