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