1 1. Pendahuluan

Tujuan Praktikum:

1. Memahami konsep uji vektor nilai tengah untuk dua populasi.

2. Mampu melakukan uji hipotesis dan membentuk selang kepercayaan untuk:

  • Sampel Berpasangan (Paired Samples)

  • Sampel Saling Bebas (Independent Samples) dengan asumsi ragam sama.

3. Mampu menginterpretasikan hasil output R dalam konteks masalah.

2 2. Perbandingan Dua Vektor Nilai Tengah Sampel Berpasangan

2.1 Input Data

library(MASS)
## Warning: package 'MASS' was built under R version 4.4.3
set.seed(1087)
n_online <- 20
n_offline <- 20

# Nilai mahasiswa belajar online (misalnya rata-rata lebih rendah)
mu_online <- c(70, 65)  
Sigma <- matrix(c(200, 50, 50, 180), 2)
data_online <- mvrnorm(n_online, mu = mu_online, Sigma = Sigma)

# Nilai mahasiswa belajar offline (misalnya rata-rata lebih tinggi)
mu_offline <- c(75, 70)
data_offline <- mvrnorm(n_offline, mu = mu_offline, Sigma = Sigma)

# Gabungkan jadi data frame
dataset <- data.frame(
  Metode = rep(c("Online", "Offline"), each = 20),
  Matematika = c(data_online[,1], data_offline[,1]),
  Statistik = c(data_online[,2], data_offline[,2])
)

dataset
##     Metode Matematika Statistik
## 1   Online   69.39210  66.35437
## 2   Online   55.53398  49.17244
## 3   Online   72.46157  49.76018
## 4   Online   39.08300  40.61234
## 5   Online   62.45599  71.65773
## 6   Online   75.23578  93.09139
## 7   Online   72.18589  41.29128
## 8   Online   68.56792  66.59471
## 9   Online   79.02621  93.53559
## 10  Online   70.57066  59.94452
## 11  Online   59.87840  85.79670
## 12  Online   60.74668  61.90498
## 13  Online   58.37231  44.44306
## 14  Online   43.00770  40.72372
## 15  Online   75.19510  65.63682
## 16  Online   67.12948  40.88629
## 17  Online   56.47855  76.71313
## 18  Online   94.88258  94.12520
## 19  Online   86.00270  67.15401
## 20  Online   67.12737  50.12900
## 21 Offline   93.32621  73.99306
## 22 Offline   91.41469  68.60563
## 23 Offline   70.32424  45.22471
## 24 Offline   80.53342  49.68809
## 25 Offline   43.74981  50.73287
## 26 Offline   68.21545  73.18667
## 27 Offline   82.26513  67.48929
## 28 Offline   99.65151  91.51111
## 29 Offline   78.26645  79.56702
## 30 Offline   84.68272  56.59560
## 31 Offline   92.03508  60.50304
## 32 Offline   93.04635  93.82870
## 33 Offline   54.04074  32.74209
## 34 Offline   77.94325  87.38648
## 35 Offline   97.40425  81.10830
## 36 Offline   83.09177  67.12157
## 37 Offline   77.58662  98.92848
## 38 Offline   74.69450  97.87072
## 39 Offline   71.54673  53.88232
## 40 Offline   52.76146  48.60109
# Pisahkan data berdasarkan kelompok
group_online <- subset(dataset, Metode == "Online", select = c(Matematika, Statistik))
group_online
##    Matematika Statistik
## 1    69.39210  66.35437
## 2    55.53398  49.17244
## 3    72.46157  49.76018
## 4    39.08300  40.61234
## 5    62.45599  71.65773
## 6    75.23578  93.09139
## 7    72.18589  41.29128
## 8    68.56792  66.59471
## 9    79.02621  93.53559
## 10   70.57066  59.94452
## 11   59.87840  85.79670
## 12   60.74668  61.90498
## 13   58.37231  44.44306
## 14   43.00770  40.72372
## 15   75.19510  65.63682
## 16   67.12948  40.88629
## 17   56.47855  76.71313
## 18   94.88258  94.12520
## 19   86.00270  67.15401
## 20   67.12737  50.12900
group_offline <- subset(dataset, Metode == "Offline", select = c(Matematika, Statistik))
group_offline
##    Matematika Statistik
## 21   93.32621  73.99306
## 22   91.41469  68.60563
## 23   70.32424  45.22471
## 24   80.53342  49.68809
## 25   43.74981  50.73287
## 26   68.21545  73.18667
## 27   82.26513  67.48929
## 28   99.65151  91.51111
## 29   78.26645  79.56702
## 30   84.68272  56.59560
## 31   92.03508  60.50304
## 32   93.04635  93.82870
## 33   54.04074  32.74209
## 34   77.94325  87.38648
## 35   97.40425  81.10830
## 36   83.09177  67.12157
## 37   77.58662  98.92848
## 38   74.69450  97.87072
## 39   71.54673  53.88232
## 40   52.76146  48.60109

2.2 Menghitung Selisih

d_matematika = group_offline$Matematika - group_online$Matematika
d_statistik  = group_offline$Statistik  - group_online$Statistik

X = data.frame(d_matematika, d_statistik)
X
##    d_matematika d_statistik
## 1    23.9341080    7.638692
## 2    35.8807172   19.433188
## 3    -2.1373300   -4.535478
## 4    41.4504246    9.075750
## 5   -18.7061766  -20.924863
## 6    -7.0203305  -19.904716
## 7    10.0792367   26.198010
## 8    31.0835877   24.916398
## 9    -0.7597643  -13.968567
## 10   14.1120579   -3.348920
## 11   32.1566828  -25.293663
## 12   32.2996679   31.923716
## 13   -4.3315717  -11.700968
## 14   34.9355452   46.662766
## 15   22.2091558   15.471486
## 16   15.9622851   26.235279
## 17   21.1080658   22.215343
## 18  -20.1880800    3.745517
## 19  -14.4559662  -13.271692
## 20  -14.3659142   -1.527910

2.3 Menghitung vektor rataan dan matriks covarians

xbar = apply(X, 2, mean)
xbar
## d_matematika  d_statistik 
##    11.662320     5.951968
cov_m = cov(X)
cov_m
##              d_matematika d_statistik
## d_matematika     413.8196    246.2584
## d_statistik      246.2584    408.6771

2.4 Uji T2 Hotelling Dua Populasi Sampel Berpasangan

library(MVTests)
## Warning: package 'MVTests' was built under R version 4.4.3
## 
## Attaching package: 'MVTests'
## The following object is masked from 'package:datasets':
## 
##     iris
mean0 = c(0,0)
result = OneSampleHT2(X,mu0=mean0,alpha=0.05)
summary(result)
##        One Sample Hotelling T Square Test 
## 
## Hotelling T Sqaure Statistic = 6.647876 
##  F value = 3.149 , df1 = 2 , df2 = 18 , p-value: 0.0672 
## 
##                    Descriptive Statistics
## 
##       d_matematika d_statistik
## N         20.00000   20.000000
## Means     11.66232    5.951968
## Sd        20.34256   20.215764
## 
## 
##                  Detection important variable(s)
## 
##                   Lower    Upper Mu0 Important Variables?
## d_matematika -0.7982769 24.12292   0                FALSE
## d_statistik  -6.4309624 18.33490   0                FALSE

2.5 Selang Kepercayaan Simultan

result$CI
##                   Lower    Upper Mu0 Important Variables?
## d_matematika -0.7982769 24.12292   0                FALSE
## d_statistik  -6.4309624 18.33490   0                FALSE

2.6 Selang Kepercayaan Bonferroni

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)
}

n = nrow(X)
#Kata
bon(xbar, cov_m,n,0.05,1)
## lower.d_matematika upper.d_matematika 
##          0.5932475         22.7313926
#Kata Kerja
bon(xbar, cov_m,n,0.05,2)
## lower.d_statistik upper.d_statistik 
##         -5.048111         16.952048

3 3. Perbandingan Dua Vektor Nilai Tengah Sampel Saling Bebas Ragam Sama

3.1 Menghitung vektor rataan dan matriks covarians

xbar1 = apply(group_online, 2, mean)
xbar1
## Matematika  Statistik 
##   66.66670   62.97637
xbar2 = apply(group_offline, 2, mean)
xbar2
## Matematika  Statistik 
##   78.32902   68.92834
cov_m1 = cov(group_online)
cov_m1
##            Matematika Statistik
## Matematika   172.4046  133.4544
## Statistik    133.4544  341.1861
cov_m2 = cov(group_offline)
cov_m2
##            Matematika Statistik
## Matematika   229.9022  160.1481
## Statistik    160.1481  366.0195
n1 = nrow(group_online)
n2 = nrow(group_offline)

# S Gabungan
s_gab = ((n1-1)*cov_m1+(n2-1)*cov_m2)/(n1+n2-2)
s_gab
##            Matematika Statistik
## Matematika   201.1534  146.8012
## Statistik    146.8012  353.6028

3.2 Uji T2 Hotelling Dua Populasi Sampel Saling Bebas Ragam Sama

library(Hotelling)
## Loading required package: corpcor
t2_homogen = hotelling.test(group_online,group_offline,var.equal=TRUE)
t2_homogen
## Test stat:  7.0272 
## Numerator df:  2 
## Denominator df:  37 
## P-value:  0.04332

3.3 Selang Kepercayaan Simultan

T.ci = function(mu1, mu2, S_gab, n1, n2, avec=rep(1,length(mu)), 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)
}
#TWK
T.ci(xbar1, xbar2, s_gab, n1,n2, avec=c(1,0),level=0.95)
##        lower        upper 
## -23.25382419  -0.07081593
#TIU
T.ci(xbar1, xbar2, s_gab, n1,n2, avec=c(0,1),level=0.95)
##      lower      upper 
## -21.320555   9.416619

3.4 Selang Kepercayaan Bonferroni

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
}
#TWK
bon(xbar1, xbar2, s_gab, n1, n2,0.05,1)
##      lower      upper 
## -22.129089  -1.195551
#TIU
bon(xbar1, xbar2, s_gab, n1, n2,0.05,2)
##      lower      upper 
## -19.829326   7.925389

4 4. Perbandingan Dua Vektor Nilai Tengah Sampel Saling Bebas Ragam Tidak Sama

4.1 Menghitung vektor rataan dan matriks covarians

xbar1 = apply(group_online, 2, mean)
xbar1
## Matematika  Statistik 
##   66.66670   62.97637
xbar2 = apply(group_offline, 2, mean)
xbar2
## Matematika  Statistik 
##   78.32902   68.92834
cov_m1 = cov(group_online)
cov_m1
##            Matematika Statistik
## Matematika   172.4046  133.4544
## Statistik    133.4544  341.1861
cov_m2 = cov(group_offline)
cov_m2
##            Matematika Statistik
## Matematika   229.9022  160.1481
## Statistik    160.1481  366.0195
n1 = nrow(group_online)
n2 = nrow(group_offline)

4.2 Uji T2 Hotelling Dua Populasi Sampel Saling Bebas Ragam Sama

library(Hotelling)
t2_not_homogen = hotelling.test(group_online,group_offline,var.equal=FALSE)
t2_not_homogen
## Test stat:  7.0272 
## Numerator df:  2 
## Denominator df:  37.7782018728633 
## P-value:  0.0431

4.3 Selang Kepercayaan Simultan

T.ci = function(mu1, mu2, S1, S2, n1, n2, avec=rep(1,length(mu)), level=0.95){
p = length(mu1)
mu = mu1-mu2
cval = qchisq(level, p)
zhat = crossprod(avec, mu)
zvar = crossprod(avec, S1 %*% avec)/n1 + crossprod(avec, S2 %*% avec)/n2
const = sqrt(cval * zvar)
c(lower = zhat - const, upper = zhat + const)
}

#TWK
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1,n2, avec=c(1,0),level=0.95)
##       lower       upper 
## -22.6404957  -0.6841445
#TWK
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1,n2, avec=c(1,0),level=0.95)
##       lower       upper 
## -22.6404957  -0.6841445
#TIU
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1,n2, avec=c(0,1),level=0.95)
##      lower      upper 
## -20.507374   8.603437