library("MASS")
library("Hotelling")
## Loading required package: corpcor

1 Kasus

Kasus: Perbandingan Nilai Bahasa Inggris dan Bahasa Jerman Mahasiswa Ekonomi vs Manajemen

set.seed(56)

# Jumlah sampel
n_eko <- 30
n_mnj <- 30

# Parameter mean (asumsi kemampuan rata-rata)
mu_eko <- c(70, 78)   # Ekonomi: English = 70, Statistics = 78
mu_mnj <- c(80, 72)   # Manajemen: English = 80, Statistics = 72

# Kovarians (hubungan antar mata kuliah)
Sigma <- matrix(c(90, 25,
                  25, 110), 2)

# Data acak multivariat normal
data_eko <- mvrnorm(n_eko, mu = mu_eko, Sigma = Sigma)
data_mnj <- mvrnorm(n_mnj, mu = mu_mnj, Sigma = Sigma)

# Satukan jadi data frame
data_mahasiswa <- data.frame(
  Jurusan = rep(c("Ekonomi", "Manajemen"), each = 30),
  English = c(data_eko[,1], data_mnj[,1]),
  Jerman = c(data_eko[,2], data_mnj[,2])
)

head(data_mahasiswa)
##   Jurusan  English   Jerman
## 1 Ekonomi 70.21338 74.57731
## 2 Ekonomi 70.72808 70.69887
## 3 Ekonomi 76.34225 68.32869
## 4 Ekonomi 58.66391 74.85500
## 5 Ekonomi 79.20792 79.11229
## 6 Ekonomi 77.76880 92.99768

1.1 1. Perbandingan Dua Vektor Nilai Tengah (Saling Bebas, Ragam Sama)

# Pisahkan data per jurusan
group_eko <- subset(data_mahasiswa, Jurusan == "Ekonomi", select = c(English, Jerman))
group_mnj <- subset(data_mahasiswa, Jurusan == "Manajemen", select = c(English, Jerman))

# Uji Hotelling T² (independen, ragam sama)
hasil_hotelling <- hotelling.test(group_eko, group_mnj)
hasil_hotelling
## Test stat:  22.953 
## Numerator df:  2 
## Denominator df:  57 
## P-value:  7.466e-05

1.2 2. Perbandingan Dua Vektor Nilai Tengah (Berpasangan)

# Selisih berpasangan (anggap tiap mahasiswa Ekonomi dipasangkan dengan Manajemen)
diff_data <- as.matrix(group_eko - group_mnj)

n <- nrow(diff_data)      # banyak pasangan
p <- ncol(diff_data)      # banyak variabel (English, Jerman)

# Rata-rata selisih
mean_diff <- colMeans(diff_data)

# Kovarians dari selisih
S <- cov(diff_data)

# Statistik Hotelling T²
T2 <- n * t(mean_diff) %*% solve(S) %*% mean_diff

# Konversi ke F
F_stat <- ((n - p) / (p * (n - 1))) * T2
p_value <- 1 - pf(F_stat, p, n - p)

list(T2 = T2, F_stat = F_stat, df1 = p, df2 = n - p, p_value = p_value)
## $T2
##          [,1]
## [1,] 21.26094
## 
## $F_stat
##         [,1]
## [1,] 10.2639
## 
## $df1
## [1] 2
## 
## $df2
## [1] 28
## 
## $p_value
##              [,1]
## [1,] 0.0004532562

1.3 3. Perbandingan Dua Vektor Nilai Tengah (Saling Bebas, Ragam Tidak Sama)

# Fungsi manual Hotelling T² untuk ragam tidak sama
hotelling_unequal <- function(x, y) {
  n1 <- nrow(x)
  n2 <- nrow(y)
  mean1 <- colMeans(x)
  mean2 <- colMeans(y)
  S1 <- cov(x)
  S2 <- cov(y)
  
  # Perbedaan mean
  diff <- mean1 - mean2
  
  # Matriks kovarian gabungan (Welch type)
  S_pool <- (S1/n1 + S2/n2)
  
  T2 <- t(diff) %*% solve(S_pool) %*% diff
  p <- ncol(x)
  
  list(T2 = T2, diff_mean = diff, cov = S_pool)
}

hasil_unequal <- hotelling_unequal(group_eko, group_mnj)
hasil_unequal
## $T2
##          [,1]
## [1,] 22.95286
## 
## $diff_mean
##   English    Jerman 
## -7.213601  6.660739 
## 
## $cov
##          English   Jerman
## English 5.047653 1.553483
## Jerman  1.553483 6.715814

1.4 4. Selang Kepercayaan Bonferroni (Ragam Sama)

# Fungsi Bonferroni CI
bon = function(mu, S, n, alpha, k){
  p = length(mu)
  lower = mu[k] - sqrt(S[k,k]/n) * abs(qt(alpha/(2*p), df=n-1))
  upper = mu[k] + sqrt(S[k,k]/n) * abs(qt(alpha/(2*p), df=n-1))
  c(lower = lower, upper = upper)
}

n1 <- nrow(group_eko)
n2 <- nrow(group_mnj)

xbar_eko <- colMeans(group_eko)
xbar_mnj <- colMeans(group_mnj)
diff_mean <- xbar_eko - xbar_mnj   # selisih rata-rata

S1 <- cov(group_eko)
S2 <- cov(group_mnj)
S_pooled <- ((n1 - 1) * S1 + (n2 - 1) * S2) / (n1 + n2 - 2)

cov_diff <- S_pooled * (1/n1 + 1/n2)

n_total <- n1 + n2
cov_m <- cov_diff
xbar_diff <- diff_mean

bon(xbar_diff, cov_m, n_total, 0.05, 1)  # untuk English
## lower.English upper.English 
##     -7.880724     -6.546478
bon(xbar_diff, cov_m, n_total, 0.05, 2)  # untuk Jerman
## lower.Jerman upper.Jerman 
##     5.891236     7.430242

Interpretasi Hasil

  1. Perbandingan Dua Vektor Nilai Tengah (Saling Bebas, Ragam Sama) Uji Hotelling T² menghasilkan nilai statistik uji yang besar dengan p-value yang jauh lebih kecil dari 0.05 Kesimpulan: terdapat perbedaan signifikan antara vektor rata-rata nilai Bahasa Inggris dan Bahasa Jerman mahasiswa Ekonomi dan Manajemen

  2. Perbandingan Dua Vektor Nilai Tengah (Berpasangan) Hasil perhitungan manual menunjukkan nilai T² dan F yang kembali menghasilkan p-value kecil (< 0.05) Kesimpulan: pada asumsi data berpasangan, rata-rata nilai kedua kelompok tetap berbeda signifikan

  3. Perbandingan Dua Vektor Nilai Tengah (Saling Bebas, Ragam Tidak Sama) Nilai T² kembali besar dengan selisih rata-rata positif untuk Bahasa Jerman (Ekonomi lebih tinggi) dan selisih rata-rata negatif untuk Bahasa English (Manajemen lebih tinggi) Kesimpulan: meskipun ragam antar kelompok berbeda, hasil tetap konsisten yaitu ada perbedaan nyata antar jurusan

  4. Selang Kepercayaan Bonferroni (Ragam Sama) Untuk Bahasa English, interval kepercayaan Bonferroni berada seluruhnya di bawah nol → artinya mahasiswa Manajemen unggul di English. Untuk Bahasa Jerman, interval kepercayaan Bonferroni berada seluruhnya di atas nol → artinya mahasiswa Ekonomi unggul di Statistics.