title: “Ejercicio 6.19 - Transporte de Leche” author: “Análisis Multivariado” date: “2025-08-27” output: html_document —
En la primera fase de un estudio sobre el costo de transporte de
leche desde las granjas hasta las plantas, se recopilaron datos de
costos para dos tipos de camiones: gasolina (n₁ = 36) y
diésel (n₂ = 23).
Las variables consideradas son:
- X₁ = Fuel (combustible)
- X₂ = Repair (mantenimiento)
- X₃ = Capital (capital)
Se busca probar si los vectores de medias difieren entre los dos tipos de camiones y analizar qué componentes son responsables.
# Cargar librerías necesarias
library(Hotelling)
library(MASS)
# Leer los datos
data <- read.table("T6-10.dat", header = FALSE)
colnames(data) <- c("Fuel", "Repair", "Capital", "Group")
# Convertir grupo a factor
data$Group <- factor(data$Group, labels = c("Gasoline", "Diesel"))
# Verificar estructura
summary(data)
## Fuel Repair Capital Group
## Min. : 4.24 Min. : 1.350 Min. : 3.28 Gasoline:23
## 1st Qu.: 9.12 1st Qu.: 5.145 1st Qu.: 8.15 Diesel :36
## Median :10.28 Median : 8.890 Median :11.23
## Mean :11.39 Mean : 9.145 Mean :12.93
## 3rd Qu.:12.70 3rd Qu.:12.575 3rd Qu.:17.00
## Max. :29.11 Max. :21.520 Max. :35.18
table(data$Group)
##
## Gasoline Diesel
## 23 36
# Prueba Hotelling T²
res <- hotelling.test(cbind(Fuel, Repair, Capital) ~ Group, data = data)
res
## Test stat: 50.913
## Numerator df: 3
## Denominator df: 55
## P-value: 1e-07
#(b) Combinación lineal responsable de la diferencia
# Separar grupos
X1 <- subset(data, Group == "Gasoline")[,1:3]
X2 <- subset(data, Group == "Diesel")[,1:3]
# Medias
mean1 <- colMeans(X1)
mean2 <- colMeans(X2)
diff <- mean1 - mean2
# Covarianzas
S1 <- cov(X1); S2 <- cov(X2)
n1 <- nrow(X1); n2 <- nrow(X2)
# Covarianza agrupada (pooled)
Spooled <- ((n1-1)*S1 + (n2-1)*S2)/(n1+n2-2)
# Vector discriminante
lin_comb <- ginv(Spooled) %*% diff
lin_comb
## [,1]
## [1,] -0.2547452
## [2,] 0.1339036
## [3,] 0.3188296
#El vector discriminante indica qué combinación de costos explica mayormente la diferencia entre grupos.
#(c) Intervalos de Confianza Simultáneos (99%)
# Intervalos Bonferroni
alpha <- 0.01
p <- 3
gmean <- diff
Sp <- Spooled*(1/n1 + 1/n2)
bonf_int <- function(j){
error <- qt(1-alpha/(2*p), df=n1+n2-2)*sqrt(Sp[j,j])
c(gmean[j]-error, gmean[j]+error)
}
intervalos <- sapply(1:3, bonf_int)
rownames(intervalos) <- c("LI", "LS")
colnames(intervalos) <- colnames(X1)
intervalos
## Fuel Repair Capital
## LI -5.365502 -1.076004 4.360802
## LS 1.139584 6.375352 12.794295
#d) Eliminando outliers (obs. 9 y 21 en gasolina)
# Eliminar observaciones 9 y 21 de gasolina
X1_sin <- X1[-c(9,21),]
data_sin <- rbind(
cbind(X1_sin, Group="Gasoline"),
cbind(X2, Group="Diesel")
)
data_sin <- as.data.frame(data_sin)
data_sin$Group <- factor(data_sin$Group)
# Nueva prueba Hotelling T²
res_sin <- hotelling.test(cbind(Fuel,Repair,Capital) ~ Group, data=data_sin)
res_sin
## Test stat: 49.252
## Numerator df: 3
## Denominator df: 53
## P-value: 1.804e-07