EJERCICIO #1
Resistencia al corte de tipos de roca
Un estudio geotécnico analiza la resistencia al corte de tres tipos de roca sometidos a condiciones similares de presión. ¿Existen diferencias significativas en la resistencia al corte entre los tipos de roca?
Grupo 1: 30.2, 29.8, 31.4, 30.9, 29.5, 30.6, 31.2, 30.8, 29.9, 30.4 Grupo 2: 33.5, 32.8, 33.2, 33.1, 32.9, 33.6, 32.7, 33.0, 33.4, 33.2 Grupo 3: 35.6, 36.2, 35.8, 36.0, 35.7, 36.3, 36.1, 35.9, 36.4, 36
Primero, Se cargan Los paquetes necesarios, y se sube la base de datos con los valores de cada grupo.
install.packages(“readxl”) install.packages(“dplyr”) install.packages(“tidyr”)
# Cargar los paquetes necesarios
library(readxl)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
# Leer los datos desde el archivo subido
datos <- read_excel("tus_datos.xlsx")
Se reorganiza la tabla, una columna para el grupo (tipo de roca) y otra para la resistencia al corte.
# Reorganizar la tabla a formato largo
datos_largos <- datos %>%
pivot_longer(cols = everything(), names_to = "Grupo", values_to = "Valor") %>%
filter(!is.na(Valor))
Se calcula el tamaño de muestra, la suma total, y la media por grupo:
# Calcular estadísticos básicos por grupo
resumen_grupo <- datos_largos %>%
group_by(Grupo) %>%
summarise(
N_i = n(),
T_i = sum(Valor),
Y_i = mean(Valor)
)
# Totales globales
N_total <- sum(resumen_grupo$N_i)
T_total <- sum(resumen_grupo$T_i)
Y_total <- T_total / N_total
Se realiza la suma total de cuadrados, la suma de cuadrados entre grupos y la suma de cuadrados del error con sus respectivas formulas
sst_parte1 <- sum((datos_largos$Valor)^2)
sst_parte2 <- (T_total^2) / N_total
SST <- sst_parte1 - sst_parte2
SSA <- sum((resumen_grupo$T_i^2) / resumen_grupo$N_i) - sst_parte2
SSE <- SST - SSA
Cálculo de grados de libertad, cuadrados medios y F:
K <- nrow(resumen_grupo)
df_SSA <- K - 1
df_SSE <- N_total - K
df_SST <- N_total - 1
MSA <- SSA / df_SSA
MSE <- SSE / df_SSE
F_value <- MSA / MSE
Se Crea la tabla ANOVA:
anova_tabla <- data.frame(
Fuente = c("Tratamiento (Entre grupos)", "Error (Dentro de grupos)", "Total"),
`Suma de Cuadrados` = c(SSA, SSE, SST),
`Grados de Libertad` = c(df_SSA, df_SSE, df_SST),
`Cuadrado Medio` = c(MSA, MSE, NA),
`F` = c(F_value, NA, NA)
)
# Mostrar la tabla
cat("\n=== Tabla ANOVA ===\n")
##
## === Tabla ANOVA ===
print(anova_tabla)
## Fuente Suma.de.Cuadrados Grados.de.Libertad
## 1 Tratamiento (Entre grupos) 152.9647 2
## 2 Error (Dentro de grupos) 4.9050 27
## 3 Total 157.8697 29
## Cuadrado.Medio F
## 1 76.4823333 421.0037
## 2 0.1816667 NA
## 3 NA NA
Se halla el Valor p y decisión estadística:
# Definir nivel de significancia
alpha <- 0.05
# Calcular valor p
p_valor <- pf(F_value, df1 = df_SSA, df2 = df_SSE, lower.tail = FALSE)
# Mostrar resultados del contraste
cat("\n=== Resultado del Contraste de Hipótesis ===\n")
##
## === Resultado del Contraste de Hipótesis ===
cat(sprintf("Estadístico F calculado: %.4f\n", F_value))
## Estadístico F calculado: 421.0037
cat(sprintf("Grados de libertad: (%d, %d)\n", df_SSA, df_SSE))
## Grados de libertad: (2, 27)
cat(sprintf("Valor p: %.5f\n", p_valor))
## Valor p: 0.00000
cat(sprintf("Nivel de significancia: %.2f\n", alpha))
## Nivel de significancia: 0.05
# Toma de decisión
decision <- if (p_valor < alpha) {
"Se rechaza la hipótesis nula: hay diferencias significativas entre al menos dos tipos de roca."
} else {
"No se rechaza la hipótesis nula: no hay evidencia suficiente para afirmar que hay diferencias."
}
cat(decision, "\n")
## Se rechaza la hipótesis nula: hay diferencias significativas entre al menos dos tipos de roca.
Se muestra un resumen final:
# Añadir resumen total
resumen_final <- resumen_grupo %>%
add_row(Grupo = "Total", N_i = N_total, T_i = T_total, Y_i = Y_total)
cat("\n=== Resumen de muestras por grupo ===\n")
##
## === Resumen de muestras por grupo ===
print(resumen_final)
## # A tibble: 4 × 4
## Grupo N_i T_i Y_i
## <chr> <int> <dbl> <dbl>
## 1 Grupo 1 10 305. 30.5
## 2 Grupo 2 10 331. 33.1
## 3 Grupo 3 10 360 36
## 4 Total 30 996. 33.2