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.
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
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
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
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
result$CI
## Lower Upper Mu0 Important Variables?
## d_matematika -0.7982769 24.12292 0 FALSE
## d_statistik -6.4309624 18.33490 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.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
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
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
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
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
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)
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
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