Latihan Uji Hipotesis Vektor Rataan Nilai Tengah Dua Populasi

Author

Gemala Aleida Fitri G1401231070

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. Perbandingan Dua Vektor Nilai Tengah Sampel Berpasangan

Input Data

library(MASS)
set.seed(1070)
n <- 20

# Nilai sebelum dan sesudah mengikuti Les A
muA <- c(70, 80)
Sigma <- matrix(c(200, 50, 50, 180), 2) # Matriks kovariansi diasumsikan sama
dataA <- mvrnorm(n, mu = muA, Sigma = Sigma)

# Nilai sebelum dan sesudah mengikuti Les B
muB <- c(65, 80)
dataB <- mvrnorm(n, mu = muB, Sigma = Sigma)

# Gabungkan menjadi satu data frame
nilai <- data.frame(
  `Sebelum Les A` = dataA[,1],
  `Sebelum Les B` = dataB[,1],
  `Sesudah Les A` = dataA[,2],
  `Sesudah Les B` = dataB[,2]
)
nilai
   Sebelum.Les.A Sebelum.Les.B Sesudah.Les.A Sesudah.Les.B
1       51.30174      47.92775      96.59497      92.41672
2       69.18803      67.95938      90.83381      93.32884
3       67.67841      72.48650      77.77968      92.63300
4       64.76418      91.55068      95.67543     121.47195
5       97.68736      68.33859      84.00117      76.97459
6       79.60906      47.75700      56.04489      69.60041
7       90.86946      56.60097      91.85520      78.62866
8       55.95027      90.80820      89.67433      86.11690
9       93.86074      50.59714      86.21936      80.40838
10      56.14764      55.59338      65.33031      64.51768
11      81.12041      68.96674      76.43923      63.81623
12     101.52626      64.18922      89.37150      83.63678
13      93.97824      59.61854      75.54729      68.34482
14      63.86326      70.83368      81.12861      90.82968
15      65.84612      71.70932      76.70822      77.77967
16      59.27870      61.97585      78.20044      65.40594
17      83.01238      58.23804      82.92691      97.05330
18      55.29330      75.62201      52.83451      81.74003
19      66.36954      62.73559      82.09699     102.44609
20      82.44271      54.56854     103.24239      85.61659

Menghitung Selisih Sebelum dan Sesudah Les

d_lesA = nilai[,3]-nilai[,1]
d_lesB = nilai[,4]-nilai[,2]

X = data.frame(d_lesA,d_lesB)

Menghitung vektor rataan dan matriks covarians

xbar = apply(X, 2, mean)
xbar
   d_lesA    d_lesB 
 7.635871 18.734457 
cov_m = cov(X)
cov_m
          d_lesA    d_lesB
d_lesA 337.07888  66.90569
d_lesB  66.90569 207.68624

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 = 33.96144 
 F value = 16.087 , df1 = 2 , df2 = 18 , p-value: 9.84e-05 

                  Descriptive Statistics

         d_lesA   d_lesB
N     20.000000 20.00000
Means  7.635871 18.73446
Sd    18.359708 14.41132


                Detection important variable(s)

           Lower    Upper Mu0 Important Variables?
d_lesA -3.610155 18.88190   0                FALSE
d_lesB  9.906968 27.56195   0               *TRUE*

Selang Kepercayaan Simultan

result$CI
           Lower    Upper Mu0 Important Variables?
d_lesA -3.610155 18.88190   0                FALSE
d_lesB  9.906968 27.56195   0               *TRUE*

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)
#Les A
bon(xbar, cov_m,n,0.05,1)
lower.d_lesA upper.d_lesA 
   -2.354266    17.626008 
#Les B
bon(xbar, cov_m,n,0.05,2)
lower.d_lesB upper.d_lesB 
    10.89277     26.57614 

Secara bersama-sama dapat dikatakan bahwa terdapat peningkatan nilai siswa setelah mengikuti les. Walaupun begitu, Les B terbukti meningkatkan nilai secara signifikan, sedangkan Les A belum menunjukkan bukti kuat adanya peningkatan.

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

set.seed(1070)
n_2 <- 20

# Rata-rata (angkat beban cenderung naik massa otot, yoga cenderung turunkan berat badan)
mu_ang <- c(72, 30)   # rata-rata berat 72 kg, otot 30 kg
mu_yog <- c(68, 26)   # rata-rata berat 68 kg, otot 26 kg


# Matriks kovarians (anggap sama)
Sigma2 <- matrix(c(12, 4,
                  4,  8), ncol=2)

# Data simulasi
data_ang <- mvrnorm(n_2, mu = mu_ang, Sigma = Sigma2)
data_yog <- mvrnorm(n_2, mu = mu_yog, Sigma = Sigma2)

data2 <- data.frame(
  olahraga = factor(rep(c("Angkat Beban", "Yoga"), c(n_2, n_2))),
  berat = c(data_ang[,1], data_yog[,1]),
  otot  = c(data_ang[,2], data_yog[,2])
)

data2
       olahraga    berat     otot
1  Angkat Beban 68.59060 33.68039
2  Angkat Beban 72.36857 32.31254
3  Angkat Beban 71.35801 29.54574
4  Angkat Beban 71.60870 33.37814
5  Angkat Beban 78.50813 30.63264
6  Angkat Beban 72.96402 24.82482
7  Angkat Beban 77.35708 32.35841
8  Angkat Beban 69.29543 32.17046
9  Angkat Beban 77.75021 31.13509
10 Angkat Beban 68.09677 26.98697
11 Angkat Beban 74.34995 29.15406
12 Angkat Beban 79.65649 31.74541
13 Angkat Beban 77.23179 28.86247
14 Angkat Beban 70.66047 30.28879
15 Angkat Beban 70.88611 29.33217
16 Angkat Beban 69.46710 29.70177
17 Angkat Beban 75.11212 30.52008
18 Angkat Beban 67.26392 24.33384
19 Angkat Beban 71.28056 30.47509
20 Angkat Beban 76.02022 34.84899
21         Yoga 64.74736 28.77813
22         Yoga 69.35467 28.81380
23         Yoga 70.34984 28.62986
24         Yoga 76.16349 34.61776
25         Yoga 68.60556 25.32959
26         Yoga 63.54294 23.92274
27         Yoga 66.01769 25.77454
28         Yoga 74.18837 27.09787
29         Yoga 64.74168 26.20088
30         Yoga 65.06745 22.77882
31         Yoga 68.07640 22.52369
32         Yoga 68.00119 26.78055
33         Yoga 66.17938 23.56163
34         Yoga 69.88141 28.25908
35         Yoga 69.41412 25.47429
36         Yoga 66.56595 22.91740
37         Yoga 67.33162 29.68351
38         Yoga 70.50726 26.28635
39         Yoga 68.63109 30.79585
40         Yoga 65.91193 27.27810
# Memisahkan Data dari Populasi 1 dan 2
data_ang <- subset(data2, olahraga == "Angkat Beban", select = c(berat,otot))
data_yog <- subset(data2, olahraga == "Yoga", select = c(berat,otot))

Menghitung vektor rataan dan matriks covarians

xbar1 = apply(data_ang, 2, mean)
xbar1
   berat     otot 
72.99131 30.31439 
xbar2 = apply(data_yog, 2, mean)
xbar2
   berat     otot 
68.16397 26.77522 
cov_m1 = cov(data_ang)
cov_m1
          berat     otot
berat 14.212165 3.124409
otot   3.124409 7.270820
cov_m2 = cov(data_yog)
cov_m2
         berat     otot
berat 9.901221 5.492902
otot  5.492902 9.107420
n1 = nrow(data_ang)
n2 = nrow(data_yog)

# S Gabungan
s_gab = ((n1-1)*cov_m1+(n2-1)*cov_m2)/(n1+n2-2)
s_gab
          berat     otot
berat 12.056693 4.308655
otot   4.308655 8.189120

Uji T2 Hotelling Dua Populasi Sampel Saling Bebas Ragam Sama

library(Hotelling)
Loading required package: corpcor
t2_homogen = hotelling.test(data_ang,data_yog,var.equal=TRUE)
t2_homogen 
Test stat:  24.277 
Numerator df:  2 
Denominator df:  37 
P-value:  0.0001074 

p-value < 0.05, artinya tolak H0, terdapat perbedaan signifikan antara olahraga angkat beban dan yoga.

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)
}
#Berat Badan
T.ci(xbar1, xbar2, s_gab, n1,n2, avec=c(1,0),level=0.95)
   lower    upper 
1.989486 7.665196 
#Otot
T.ci(xbar1, xbar2, s_gab, n1,n2, avec=c(0,1),level=0.95)
   lower    upper 
1.200363 5.877981 

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
}
#Berat Badan
bon(xbar1, xbar2, s_gab, n1, n2,0.05,1)
   lower    upper 
2.264846 7.389836 
#Otot
bon(xbar1, xbar2, s_gab, n1, n2,0.05,2)
   lower    upper 
1.427300 5.651044 

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

Uji T2 Hotelling Dua Populasi Sampel Saling Bebas Ragam Sama

library(Hotelling)
t2_not_homogen = hotelling.test(data_ang,data_yog,var.equal=FALSE)
t2_not_homogen
Test stat:  24.277 
Numerator df:  2 
Denominator df:  37.4421661933901 
P-value:  0.000105 

p-value < 0.05, artinya tolak H0, terdapat perbedaan signifikan antara olahraga angkat beban dan yoga.

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)
}
#Berat Badan
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1,n2, avec=c(1,0),level=0.95)
   lower    upper 
2.139642 7.515040 
#Otot
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1,n2, avec=c(0,1),level=0.95)
   lower    upper 
1.324114 5.754230