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.
set.seed(63)
# Banyak baris data
n <- 15
# Bangkitkan data acak
data <- data.frame(
`Mobil` = sample(100:230, n, replace = TRUE),
`Mobil Matic` = sample(10:35, n, replace = TRUE),
`Motor` = sample(70:220, n, replace = TRUE),
`Motor Matic` = sample(7:30, n, replace = TRUE)
)
# Tampilkan data
print(data)
## Mobil Mobil.Matic Motor Motor.Matic
## 1 166 17 153 7
## 2 141 29 134 21
## 3 104 20 155 28
## 4 184 31 184 17
## 5 112 14 155 20
## 6 190 35 159 19
## 7 151 20 74 25
## 8 183 20 112 29
## 9 101 11 86 30
## 10 223 12 165 20
## 11 197 23 198 7
## 12 105 11 186 19
## 13 208 24 93 27
## 14 134 25 128 19
## 15 191 30 90 26
d1 = data[,1]-data[,3]
d2 = data[,2]-data[,4]
X = data.frame(d1,d2)
X
## d1 d2
## 1 13 10
## 2 7 8
## 3 -51 -8
## 4 0 14
## 5 -43 -6
## 6 31 16
## 7 77 -5
## 8 71 -9
## 9 15 -19
## 10 58 -8
## 11 -1 16
## 12 -81 -8
## 13 115 -3
## 14 6 6
## 15 101 4
xbar = apply(X, 2, mean)
xbar
## d1 d2
## 21.2000000 0.5333333
cov_m = cov(X)
cov_m
## d1 d2
## d1 3105.028571 9.457143
## d2 9.457143 115.980952
library(MVTests)
##
## 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 = 2.199614
## F value = 1.021 , df1 = 2 , df2 = 13 , p-value: 0.387
##
## Descriptive Statistics
##
## d1 d2
## N 15.00000 15.0000000
## Means 21.20000 0.5333333
## Sd 55.72278 10.7694453
##
##
## Detection important variable(s)
##
## Lower Upper Mu0 Important Variables?
## d1 -19.991167 62.391167 0 FALSE
## d2 -7.427612 8.494278 0 FALSE
result$CI
## Lower Upper Mu0 Important Variables?
## d1 -19.991167 62.391167 0 FALSE
## d2 -7.427612 8.494278 0 FALSE
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.d1 upper.d1
## -14.90658 57.30658
#Kata Kerja
bon(xbar, cov_m,n,0.05,2)
## lower.d2 upper.d2
## -6.444923 7.511590
set.seed(63)
n <- 20
data2 <- data.frame(
`UNBT SD` = round(rnorm(n, mean = 65, sd = 10)),
`UNBT SMP` = round(rnorm(n, mean = 55, sd = 12)),
`UNBK SD` = round(rnorm(n, mean = 70, sd = 15)),
`UNBK SMP` = round(rnorm(n, mean = 60, sd = 12))
)
print(data2)
## UNBT.SD UNBT.SMP UNBK.SD UNBK.SMP
## 1 78 67 65 53
## 2 46 46 70 68
## 3 70 44 69 50
## 4 46 62 55 64
## 5 70 46 25 51
## 6 54 77 93 60
## 7 69 64 77 67
## 8 66 39 88 72
## 9 48 61 74 49
## 10 69 57 67 61
## 11 69 38 78 75
## 12 64 60 72 59
## 13 68 62 71 56
## 14 67 53 51 44
## 15 63 67 66 63
## 16 67 63 33 58
## 17 61 37 63 44
## 18 74 74 58 50
## 19 75 67 56 71
## 20 77 65 93 60
# Memisahkan Data dari Populasi 1 dan 2
d3 = data2[,1:2]
d4 = data2[,3:4]
xbar1 = apply(d3, 2, mean)
xbar1
## UNBT.SD UNBT.SMP
## 65.05 57.45
xbar2 = apply(d4, 2, mean)
xbar2
## UNBK.SD UNBK.SMP
## 66.20 58.75
cov_m1 = cov(d3)
cov_m1
## UNBT.SD UNBT.SMP
## UNBT.SD 92.78684 10.23947
## UNBT.SMP 10.23947 143.20789
cov_m2 = cov(d4)
cov_m2
## UNBK.SD UNBK.SMP
## UNBK.SD 297.22105 56.36842
## UNBK.SMP 56.36842 83.25000
n1 = nrow(d3)
n2 = nrow(d4)
# S Gabungan
s_gab = ((n1-1)*cov_m1+(n2-1)*cov_m2)/(n1+n2-2)
s_gab
## UNBT.SD UNBT.SMP
## UNBT.SD 195.00395 33.30395
## UNBT.SMP 33.30395 113.22895
library(Hotelling)
## Loading required package: corpcor
t2_homogen = hotelling.test(d3,d4,var.equal=TRUE)
t2_homogen
## Test stat: 0.18107
## Numerator df: 2
## Denominator df: 37
## P-value: 0.9158
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
## -12.56295 10.26295
#TIU
T.ci(xbar1, xbar2, s_gab, n1,n2, avec=c(0,1),level=0.95)
## lower upper
## -9.996707 7.396707
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
## -11.455538 9.155538
#TIU
bon(xbar1, xbar2, s_gab, n1, n2,0.05,2)
## lower upper
## -9.152857 6.552857
set.seed(63)
n <- 20
data3 <- data.frame(
`UNBT SD` = round(rnorm(n, mean = 65, sd = 10)),
`UNBT SMP` = round(rnorm(n, mean = 55, sd = 12)),
`UNBK SD` = round(rnorm(n, mean = 70, sd = 15)),
`UNBK SMP` = round(rnorm(n, mean = 60, sd = 12))
)
print(data3)
## UNBT.SD UNBT.SMP UNBK.SD UNBK.SMP
## 1 78 67 65 53
## 2 46 46 70 68
## 3 70 44 69 50
## 4 46 62 55 64
## 5 70 46 25 51
## 6 54 77 93 60
## 7 69 64 77 67
## 8 66 39 88 72
## 9 48 61 74 49
## 10 69 57 67 61
## 11 69 38 78 75
## 12 64 60 72 59
## 13 68 62 71 56
## 14 67 53 51 44
## 15 63 67 66 63
## 16 67 63 33 58
## 17 61 37 63 44
## 18 74 74 58 50
## 19 75 67 56 71
## 20 77 65 93 60
# Memisahkan Data dari Populasi 1 dan 2
d5 = data3[,1:2]
d6 = data3[,3:4]
xbar1 = apply(d5, 2, mean)
xbar1
## UNBT.SD UNBT.SMP
## 65.05 57.45
xbar2 = apply(d5, 2, mean)
xbar2
## UNBT.SD UNBT.SMP
## 65.05 57.45
cov_m1 = cov(d5)
cov_m1
## UNBT.SD UNBT.SMP
## UNBT.SD 92.78684 10.23947
## UNBT.SMP 10.23947 143.20789
cov_m2 = cov(d6)
cov_m2
## UNBK.SD UNBK.SMP
## UNBK.SD 297.22105 56.36842
## UNBK.SMP 56.36842 83.25000
n1 = nrow(d5)
n2 = nrow(d6)
library(Hotelling)
t2_not_homogen = hotelling.test(d5,d6,var.equal=FALSE)
t2_not_homogen
## Test stat: 0.18107
## Numerator df: 2
## Denominator df: 33.9571171928145
## P-value: 0.9158
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
## -10.80907 10.80907
#TWK
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1,n2, avec=c(1,0),level=0.95)
## lower upper
## -10.80907 10.80907
#TIU
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1,n2, avec=c(0,1),level=0.95)
## lower upper
## -8.236548 8.236548
library(MASS)
set.seed(63)
unbt <- 20
unbk <- 20
# Nilai peserta CAT: Misalnya rata-rata lebih rendah
mu_unbt <- c(60, 55)
Sigma <- matrix(c(200, 50, 50, 180), 2) # Matriks kovariansi diasumsikan sama
data_unbt <- mvrnorm(unbt, mu = mu_unbt, Sigma = Sigma)
# Nilai peserta Manual: Misalnya rata-rata lebih tinggi
mu_unbk <- c(65, 60)
data_unbk <- mvrnorm(unbk, mu = mu_unbk, Sigma = Sigma)
# Gabungkan menjadi satu data frame
data_siswa <- data.frame(
Metode = rep(c("UNBT", "UNBK"), each = 20),
SD = c(data_unbt[,1], data_unbk[,1]),
SMP = c(data_unbt[,2], data_unbk[,2])
)
data_siswa
## Metode SD SMP
## 1 UNBT 51.54474 32.89156
## 2 UNBT 76.61587 80.59872
## 3 UNBT 47.53539 58.14733
## 4 UNBT 87.34108 68.17126
## 5 UNBT 47.94602 56.30959
## 6 UNBT 86.56771 48.83678
## 7 UNBT 60.90786 44.04124
## 8 UNBT 48.38442 65.92683
## 9 UNBT 83.47054 66.85448
## 10 UNBT 55.87114 49.65947
## 11 UNBT 45.12615 63.77619
## 12 UNBT 64.85345 52.60249
## 13 UNBT 60.15793 46.45980
## 14 UNBT 56.91586 54.38329
## 15 UNBT 70.30212 48.36083
## 16 UNBT 62.35042 46.80681
## 17 UNBT 53.18673 72.77664
## 18 UNBT 60.76063 31.71731
## 19 UNBT 55.87071 36.66395
## 20 UNBT 52.11118 35.45281
## 21 UNBK 64.27545 68.67255
## 22 UNBK 69.71600 54.23550
## 23 UNBK 59.17810 68.31901
## 24 UNBK 79.01712 66.87510
## 25 UNBK 95.84525 96.43944
## 26 UNBK 47.21205 44.89107
## 27 UNBK 63.78272 50.01694
## 28 UNBK 57.74188 39.09402
## 29 UNBK 55.46601 65.57480
## 30 UNBK 68.20733 60.82346
## 31 UNBK 67.41655 43.51128
## 32 UNBK 63.05253 59.77584
## 33 UNBK 61.64836 61.97146
## 34 UNBK 69.81975 84.47458
## 35 UNBK 70.36413 60.74942
## 36 UNBK 93.32125 86.34714
## 37 UNBK 60.93205 76.52587
## 38 UNBK 68.09878 75.43910
## 39 UNBK 83.17794 60.52428
## 40 UNBK 47.08078 44.75717
# Pisahkan data berdasarkan kelompok
group_unbt <- subset(data_siswa, Metode == "UNBT", select = c(SD, SMP))
group_unbt
## SD SMP
## 1 51.54474 32.89156
## 2 76.61587 80.59872
## 3 47.53539 58.14733
## 4 87.34108 68.17126
## 5 47.94602 56.30959
## 6 86.56771 48.83678
## 7 60.90786 44.04124
## 8 48.38442 65.92683
## 9 83.47054 66.85448
## 10 55.87114 49.65947
## 11 45.12615 63.77619
## 12 64.85345 52.60249
## 13 60.15793 46.45980
## 14 56.91586 54.38329
## 15 70.30212 48.36083
## 16 62.35042 46.80681
## 17 53.18673 72.77664
## 18 60.76063 31.71731
## 19 55.87071 36.66395
## 20 52.11118 35.45281
group_unbk <- subset(data_siswa, Metode == "UNBK", select = c(SD, SMP))
group_unbk
## SD SMP
## 21 64.27545 68.67255
## 22 69.71600 54.23550
## 23 59.17810 68.31901
## 24 79.01712 66.87510
## 25 95.84525 96.43944
## 26 47.21205 44.89107
## 27 63.78272 50.01694
## 28 57.74188 39.09402
## 29 55.46601 65.57480
## 30 68.20733 60.82346
## 31 67.41655 43.51128
## 32 63.05253 59.77584
## 33 61.64836 61.97146
## 34 69.81975 84.47458
## 35 70.36413 60.74942
## 36 93.32125 86.34714
## 37 60.93205 76.52587
## 38 68.09878 75.43910
## 39 83.17794 60.52428
## 40 47.08078 44.75717