# Paso 1: Crear los datos
grupo1 <- c(30.2, 29.8, 31.4, 30.9, 29.5, 30.6, 31.2, 30.8, 29.9, 30.4)
grupo2 <- c(33.5, 32.8, 33.2, 33.1, 32.9, 33.6, 32.7, 33.0, 33.4, 33.2)
grupo3 <- c(35.6, 36.2, 35.8, 36.0, 35.7, 36.3, 36.1, 35.9, 36.4, 36.0)

# Unir los datos en un solo marco de datos
resistencia <- c(grupo1, grupo2, grupo3)
grupos <- factor(rep(c("Grupo 1", "Grupo 2", "Grupo 3"), each = 10))

datos <- data.frame(Resistencia = resistencia, Grupo = grupos)

# Ver los datos para confirmar
print(datos)
##    Resistencia   Grupo
## 1         30.2 Grupo 1
## 2         29.8 Grupo 1
## 3         31.4 Grupo 1
## 4         30.9 Grupo 1
## 5         29.5 Grupo 1
## 6         30.6 Grupo 1
## 7         31.2 Grupo 1
## 8         30.8 Grupo 1
## 9         29.9 Grupo 1
## 10        30.4 Grupo 1
## 11        33.5 Grupo 2
## 12        32.8 Grupo 2
## 13        33.2 Grupo 2
## 14        33.1 Grupo 2
## 15        32.9 Grupo 2
## 16        33.6 Grupo 2
## 17        32.7 Grupo 2
## 18        33.0 Grupo 2
## 19        33.4 Grupo 2
## 20        33.2 Grupo 2
## 21        35.6 Grupo 3
## 22        36.2 Grupo 3
## 23        35.8 Grupo 3
## 24        36.0 Grupo 3
## 25        35.7 Grupo 3
## 26        36.3 Grupo 3
## 27        36.1 Grupo 3
## 28        35.9 Grupo 3
## 29        36.4 Grupo 3
## 30        36.0 Grupo 3
# Paso 2: Realizar el análisis ANOVA
modelo_anova <- aov(Resistencia ~ Grupo, data = datos)

# Mostrar resultados del ANOVA
resultado <- summary(modelo_anova)
print(resultado)
##             Df Sum Sq Mean Sq F value Pr(>F)    
## Grupo        2 152.96   76.48     421 <2e-16 ***
## Residuals   27   4.91    0.18                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Paso 3: Cálculos detallados (opcional)
# Extraer valores específicos para comprobar manualmente
ss_entre <- sum((tapply(resistencia, grupos, mean) - mean(resistencia))^2 * table(grupos))
ss_dentro <- sum((resistencia - rep(tapply(resistencia, grupos, mean), table(grupos)))^2)
df_entre <- length(levels(grupos)) - 1
df_dentro <- length(resistencia) - length(levels(grupos))
ms_entre <- ss_entre / df_entre
ms_dentro <- ss_dentro / df_dentro
f_calculado <- ms_entre / ms_dentro

# Mostrar los valores clave
cat("\nCálculos detallados:")
## 
## Cálculos detallados:
cat("\nSuma de cuadrados entre grupos (SS_entre):", ss_entre)
## 
## Suma de cuadrados entre grupos (SS_entre): 152.9647
cat("\nSuma de cuadrados dentro de los grupos (SS_dentro):", ss_dentro)
## 
## Suma de cuadrados dentro de los grupos (SS_dentro): 4.905
cat("\nGrados de libertad entre grupos (df_entre):", df_entre)
## 
## Grados de libertad entre grupos (df_entre): 2
cat("\nGrados de libertad dentro de los grupos (df_dentro):", df_dentro)
## 
## Grados de libertad dentro de los grupos (df_dentro): 27
cat("\nMedia cuadrática entre grupos (MS_entre):", ms_entre)
## 
## Media cuadrática entre grupos (MS_entre): 76.48233
cat("\nMedia cuadrática dentro de los grupos (MS_dentro):", ms_dentro)
## 
## Media cuadrática dentro de los grupos (MS_dentro): 0.1816667
cat("\nEstadístico F:", f_calculado)
## 
## Estadístico F: 421.0037
# Paso 4: Comprobar significancia
if (resultado[[1]]$`Pr(>F)`[1] < 0.05) {
  cat("\nEl resultado es estadísticamente significativo (p < 0.05).")
} else {
  cat("\nEl resultado NO es estadísticamente significativo (p >= 0.05).")
}
## 
## El resultado es estadísticamente significativo (p < 0.05).
# Paso 5: Gráfico de cajas para visualizar los datos
boxplot(Resistencia ~ Grupo, data = datos,
        main = "Resistencia al corte por tipo de roca",
        xlab = "Grupo",
        ylab = "Resistencia",
        col = c("lightblue", "lightgreen", "lightpink"))