library(MASS)
set.seed(456)
n_sbmptn <- 30
n_mandiri <- 30
# Nilai mahasiswa jalur SBMPTN
mu_sbmptn <- c(80, 75) # (Matematika, Bahasa)
Sigma <- matrix(c(100, 30,
30, 90), 2) # matriks kovariansi
data_sbmptn <- mvrnorm(n_sbmptn, mu = mu_sbmptn, Sigma = Sigma)
# Nilai mahasiswa jalur Mandiri
mu_mandiri <- c(72, 68)
data_mandiri <- mvrnorm(n_mandiri, mu = mu_mandiri, Sigma = Sigma)
# Gabungkan
data_mhs <- data.frame(
Jalur = rep(c("SBMPTN", "Mandiri"), each = 30),
Matematika = c(data_sbmptn[,1], data_mandiri[,1]),
Bahasa = c(data_sbmptn[,2], data_mandiri[,2])
)
data_mhs
## Jalur Matematika Bahasa
## 1 SBMPTN 88.73341 87.96786
## 2 SBMPTN 71.60244 74.14036
## 3 SBMPTN 62.77296 81.46021
## 4 SBMPTN 93.40640 83.23767
## 5 SBMPTN 86.99046 79.12469
## 6 SBMPTN 92.20071 66.21209
## 7 SBMPTN 70.66692 74.05153
## 8 SBMPTN 77.13053 74.04641
## 9 SBMPTN 69.18983 70.30800
## 10 SBMPTN 74.90053 71.08809
## 11 SBMPTN 87.67520 81.80670
## 12 SBMPTN 70.83844 63.09931
## 13 SBMPTN 70.25475 69.37361
## 14 SBMPTN 66.30078 62.51608
## 15 SBMPTN 103.11056 72.68171
## 16 SBMPTN 63.98775 60.16271
## 17 SBMPTN 65.77174 61.70244
## 18 SBMPTN 80.68913 67.47313
## 19 SBMPTN 54.41149 65.70327
## 20 SBMPTN 68.98369 61.35957
## 21 SBMPTN 80.60129 82.51300
## 22 SBMPTN 93.34174 89.00401
## 23 SBMPTN 95.71819 81.16599
## 24 SBMPTN 82.87941 67.99316
## 25 SBMPTN 83.51835 71.46761
## 26 SBMPTN 74.10724 62.30401
## 27 SBMPTN 81.80878 80.88405
## 28 SBMPTN 90.89828 67.82447
## 29 SBMPTN 70.12863 60.93222
## 30 SBMPTN 92.30674 79.34650
## 31 Mandiri 88.80805 87.22295
## 32 Mandiri 76.91536 79.21239
## 33 Mandiri 80.77088 61.12129
## 34 Mandiri 71.68392 52.85060
## 35 Mandiri 68.56560 72.80861
## 36 Mandiri 57.50543 56.56967
## 37 Mandiri 62.85038 51.71567
## 38 Mandiri 86.84178 75.27934
## 39 Mandiri 82.49240 65.04956
## 40 Mandiri 77.70057 74.63313
## 41 Mandiri 74.06629 68.50597
## 42 Mandiri 76.86713 62.96077
## 43 Mandiri 86.22432 81.01813
## 44 Mandiri 60.01811 57.12414
## 45 Mandiri 63.43145 78.46161
## 46 Mandiri 75.49305 59.19466
## 47 Mandiri 65.94521 77.10408
## 48 Mandiri 76.51458 77.48216
## 49 Mandiri 78.91065 77.75244
## 50 Mandiri 71.94176 64.22201
## 51 Mandiri 77.01736 80.77987
## 52 Mandiri 74.83791 72.29703
## 53 Mandiri 48.77215 60.41085
## 54 Mandiri 71.87739 66.88245
## 55 Mandiri 70.17527 57.87334
## 56 Mandiri 69.83846 55.81602
## 57 Mandiri 89.11927 73.54064
## 58 Mandiri 70.40585 53.93310
## 59 Mandiri 63.28460 75.71830
## 60 Mandiri 68.30502 76.46566
# Pisahkan per kelompok
data_sbmptn = subset(data_mhs, Jalur=="SBMPTN")[,2:3]
data_mandiri = subset(data_mhs, Jalur=="Mandiri")[,2:3]
xbar_sbmptn = apply(data_sbmptn, 2, mean)
xbar_mandiri = apply(data_mandiri, 2, mean)
cov_sbmptn = cov(data_sbmptn)
cov_mandiri = cov(data_mandiri)
n1 = nrow(data_sbmptn)
n2 = nrow(data_mandiri)
xbar_sbmptn
## Matematika Bahasa
## 78.83088 72.36502
xbar_mandiri
## Matematika Bahasa
## 72.90601 68.46688
cov_sbmptn
## Matematika Bahasa
## Matematika 140.17243 56.19497
## Bahasa 56.19497 73.33674
cov_mandiri
## Matematika Bahasa
## Matematika 88.20074 43.66258
## Bahasa 43.66258 100.83380
library(Hotelling)
## Loading required package: corpcor
t2_homogen = hotelling.test(data_sbmptn, data_mandiri, var.equal=TRUE)
t2_homogen
## Test stat: 5.0044
## Numerator df: 2
## Denominator df: 57
## P-value: 0.09454
t2_heterogen = hotelling.test(data_sbmptn, data_mandiri, var.equal=FALSE)
t2_heterogen
## Test stat: 5.0044
## Numerator df: 2
## Denominator df: 57.0571651848478
## P-value: 0.09454
T.ci = function(mu1, mu2, S_gab, n1, n2, avec=rep(1,length(mu1)), level=0.95){
p = length(mu1)
mu = mu1 - mu2
cval = qf(level, p, n1+n2-p-1) * p * (n1+n2-2) / (n1+n2-p-1)
zhat = crossprod(avec, mu)
zvar = crossprod(avec, S_gab %*% avec)*(1/n1+1/n2)
const = sqrt(cval * zvar)
c(lower = zhat - const, upper = zhat + const)
}
# Gabungan kovarians
s_gab = ((n1-1)*cov_sbmptn+(n2-1)*cov_mandiri)/(n1+n2-2)
# Matematika
T.ci(xbar_sbmptn, xbar_mandiri, s_gab, n1, n2, avec=c(1,0), level=0.95)
## lower upper
## -1.070607 12.920351
# Bahasa
T.ci(xbar_sbmptn, xbar_mandiri, s_gab, n1, n2, avec=c(0,1), level=0.95)
## lower upper
## -2.211037 10.007305
bon = function(mu1, mu2 ,S, n1, n2, alpha, k){
p = length(mu1)
mu = mu1 - mu2
lower = mu[k] - sqrt((S[k,k])*(1/n1+1/n2))* abs(qt(alpha/(2*p), df=n1+n2-2))
upper = mu[k] + sqrt((S[k,k])*(1/n1+1/n2))* abs(qt(alpha/(2*p), df=n1+n2-2))
ci = c(lower = lower, upper = upper)
names(ci) = c("lower","upper")
ci
}
# Matematika
bon(xbar_sbmptn, xbar_mandiri, s_gab, n1, n2, 0.05, 1)
## lower upper
## -0.4239669 12.2737110
# Bahasa
bon(xbar_sbmptn, xbar_mandiri, s_gab, n1, n2, 0.05, 2)
## lower upper
## -1.646324 9.442592
Uji Hotelling’s T²
Hipotesis nol (H₀): tidak ada perbedaan vektor rataan (nilai Matematika & Bahasa) antara mahasiswa SBMPTN dan Mandiri.
Hipotesis alternatif (H₁): ada perbedaan vektor rataan.
Dari output hotelling.test(…), kalau p-value < 0.05, maka H₀ ditolak → ada perbedaan yang signifikan secara multivariat. Kalau p-value ≥ 0.05, maka H₀ tidak ditolak → rata-rata keduanya mirip secara multivariat.
Jika selang kepercayaan tidak mengandung 0, artinya memang ada perbedaan signifikan pada variabel tersebut.
Kalau selang kepercayaan mencakup 0, artinya tidak ada bukti cukup perbedaan untuk variabel itu.
Interpretasi Akhir (umum untuk kasus simulasi kamu)
Mahasiswa SBMPTN cenderung punya nilai lebih tinggi pada Matematika dan Bahasa dibanding jalur Mandiri.
Uji Hotelling’s T² menunjukkan bahwa perbedaan rata-rata secara bersama-sama (multivariat) signifikan.
Dari selang kepercayaan, perbedaan paling jelas terlihat pada Matematika, sedangkan Bahasa juga berbeda tapi mungkin kontribusinya lebih kecil.