Berikut ini adalah data dari sampel siswa di sebuah sekolah yang
dilihat dari skor nilai matematika (X1) dan fisika (X2). Kedua peubah
diasumsikan menyebar normal bivariat Pertanyaan : 1. Hitunglah vektor
rataan dan matriks kovariannya? 2. Ujilah pada taraf nyata 10%, apakah
vektor rataan populasi \(\mu_1\)=55
\(\mu_2\)=60 3. Tentukan ellips
kepercayaan 90% bagi \(\mu\) dan
buatlah gambarnya! 4. Apakah seseorang siswa yang memiliki skor
matematika 65 dan skor
fisika 70 masuk ke dalam ellips kepercayaan tersebut? 5. Buatlah selang
kepercayaan simultan dan selang bonferroni 90%
#Input Data
x1<-c(72.8, 46, 59.2, 66.7, 84.2,50.4, 49.6, 77.9, 63.9, 55.1)
x2<-c(69.9, 68.9, 58.4, 78.2, 63.9, 54.6, 66.5, 71.6, 77.2, 56.8)
# Soal bagian 1 : vektor rataan dan matriks kovarian
n<-10
p<-2
x1_bar<- sum(x1)/length(x1)
x2_bar<- sum(x2)/length(x2)
# atau gabung dulu semuanya terus pake colmeans
meanvector<-colMeans(cbind(x1,x2))
meanvector
## x1 x2
## 62.58 66.60
# matriks kovarian
X<-data.frame(x1,x2)
covarian<-cov(X)
covarian
## x1 x2
## x1 164.93289 36.00889
## x2 36.00889 66.96444
# Soal 2 itu ditanya apakah vector rataan populasi miu1 55 miu2 60, cari nilai Hotelingnya
miu<- c(55,60)
invcov<-solve(covarian)
s2<-diag(covarian)
T2<- n* t(meanvector-miu) %*% invcov %*% (meanvector-miu)
T2
## [,1]
## [1,] 7.621161
C2<- (n-1)*p/(n-p) * qf(0.90, 2, 8, lower.tail = TRUE)
C2
## [1] 7.004515
# Hasil Uji
if (T2 > C2) {
cat(" Tolak H0 \n")
} else {
cat("Gagal tolak H0\n")
}
## Tolak H0
Simpulan: Karena nilai T hotteling 7.621161> nilai kritisnya (C2)7.004515, maka tolak H0, artinya ada bukti statistik yang cukup untuk menyatakan rata-rata populasi yang diuji tidak sama atau ada perbedaan yang signifikan antara nilai tengah matematika dan fisika dalam taraf nyata 10%.
# menentukan ellipse kepercayaan
library(ellipse)
## Warning: package 'ellipse' was built under R version 4.4.3
##
## Attaching package: 'ellipse'
## The following object is masked from 'package:graphics':
##
## pairs
# Ellipse 90%
plot(X, main="Ellips Kepercayaan 90% untuk Mean")
points(meanvector[1], meanvector[2], col="red", pch=19, cex=1.5)
lines(ellipse(covarian/10, centre=meanvector, level=0.90), col="blue", lwd=2)
# selang kepercayaan simultan
CI_hotelling <- data.frame(
Lower = meanvector - sqrt(C2 * s2 / n),
Upper = meanvector + sqrt(C2* s2 / n)
)
CI_hotelling
## Lower Upper
## x1 51.83163 73.32837
## x2 59.75125 73.44875
#selang kepercayaan bonferoni
t_bonf <- qt(1 - 0.9/(2*p), df=n-1) # perhitungan itu dri arah kiri jdinya harus 1-0.90 agar terbacanya yg peluang kanan
CI_bonf <- data.frame(
Lower = meanvector - t_bonf * sqrt(s2/n),
Upper = meanvector + t_bonf * sqrt(s2/n)
)
CI_bonf
## Lower Upper
## x1 59.37282 65.78718
## x2 64.55642 68.64358
# soal 4
# gunakan jarak mahalonobis untuk melihat suatu titik masukdalam daerah ellips atau tidak
library(ellipse)
p <- 2
n <- nrow(X)
alpha <- 0.10
# Titik uji
titik <- c(65,70)
# Hitung Mahalanobis distance (Hotelling T²)
T2 <- mahalanobis(titik, center=meanvector, cov=covarian/n)
# Nilai kritis Hotelling
crit <- (p*(n-1)/(n-p)) * qf(1-alpha, p, n-p)
# Keputusan
inside <- (T2 <= crit)
# Warna titik uji
col_titik <- ifelse(inside, "darkgreen", "red")
# Plot data dan ellipse
plot(X, main="Ellips Kepercayaan 90% (Hotelling T²)")
points(meanvector[1], meanvector[2], col="blue", pch=19, cex=1.5) # mean
lines(ellipse(covarian/n * crit, centre=meanvector), col="blue", lwd=2) # ellipse Hotelling
points(titik[1], titik[2], col=col_titik, pch=17, cex=1.5) # titik uji
# Cetak hasil uji
cat("Nilai T² =", T2, "\nNilai kritis =", crit, "\nInside? =", inside, "\n")
## Nilai T² = 1.750341
## Nilai kritis = 7.004515
## Inside? = TRUE
soal ada pada ppt praktikum pertemuan 3
# Latihan Soal 1
n <- 20
p <- 3
xbar <- c(4.640, 45.400, 9.965)
mu0 <- c(4, 50, 10)
s <- matrix(c(2.879, 10.010, -1.810,
10.010, 199.788, -5.640,
-1.810, -5.640, 3.628), nrow=3, ncol=3, byrow=TRUE)
sinv <- solve(s)
T2 <- n* t(xbar-mu0) %*% sinv %*% (xbar-mu0)
T2
## [,1]
## [1,] 9.743038
C2<- (n-1)*p/(n-p) * qf(0.90, 3, 17, lower.tail = TRUE)
C2
## [1] 8.172573
# kalau mau cek pake fhit dan ftab
Fhit<- (n-p)/p*(n-1) * T2
Ftab<- qf(0.95, 17, 8, lower.tail = TRUE)
pvalue<- 1 - pf(Fhit, df1 = p, df2 = n - p)
# Hasil Uji
if (T2 > C2) {
cat(" Tolak H0 \n")
} else {
cat("Gagal tolak H0\n")
}
## Tolak H0
Simpulan Karena nilai hotteling>nilai
kritisnya,H0 ditolak. Artinya, terdapat bukti yang signifikan bahwa
rata-rata populasi tidak sama dengan (4,50,10) sekurang-kurangnya ada
satu komponen rata-rata yang berbeda dari nilai yang
dihipotesiskan.
Diketahui data matriks dari sampel acak berukuran n = 4 dari populasi normal bivariat sebagai berikut ujilah H0: miu’=(7 11) alpa 5%
# latihan 2
x1<- c(2,8,6,8)
x2<- c(12,9,9,10)
miu<-c(7,11)
miu
## [1] 7 11
n<-4
p<-2
x1_bar<- sum(x1)/length(x1)
x2_bar<- sum(x2)/length(x2)
# atau gabung dulu semuanya terus pake colmeans
meanvector<-colMeans(cbind(x1,x2))
meanvector
## x1 x2
## 6 10
# matriks kovarian
X<-data.frame(x1,x2)
covarian<-cov(X)
covarian
## x1 x2
## x1 8.000000 -3.333333
## x2 -3.333333 2.000000
# cari nilai T hoteling
T2<- n* t(meanvector-miu) %*% solve(covarian) %*% (meanvector-miu)
T2
## [,1]
## [1,] 13.63636
C2<- (n-1)*p/(n-p) * qf(0.95, 2, 2, lower.tail = TRUE)
C2
## [1] 57
# Hasil Uji
if (T2 > C2) {
cat(" Tolak H0 \n")
} else {
cat("Gagal tolak H0\n")
}
## Gagal tolak H0
Simpulan dalam taraf nyata 5% Artinya tidak ada bukti yang cukup secara statistik untuk menyimpulkan bahwa vektor rata-rata populasi berbeda dari (7,11).
Praktikum 4 dengan data yang dibangkitkan
KASUS: Kita ingin melihat apakah rata-rata harga
beras (dalam ribuan rupiah per kg) di Indonesia dan Thailand berbeda
secara signifikan pada dua periode berbeda:
-Periode A (sebelum kebijakan impor)
-Periode B (setelah kebijakan impor)
# Bangkitkan Data
set.seed(1035)
# Misalkan kita punya data harga beras (dalam ribu rupiah) untuk 10 bulan
n <- 10
# Harga sebelum kebijakan (Periode A)
indo_A <- rnorm(n, mean = 12, sd = 1)
thai_A <- rnorm(n, mean = 11, sd = 1)
# Harga sesudah kebijakan (Periode B)
indo_B <- rnorm(n, mean = 13, sd = 1.2)
thai_B <- rnorm(n, mean = 11.5, sd = 1)
# Gabungkan ke data frame
dataset <- data.frame(indo_A, indo_B, thai_A, thai_B)
dataset
## indo_A indo_B thai_A thai_B
## 1 11.55818 13.30686 10.28292 10.224329
## 2 10.02527 14.56209 12.27227 11.489459
## 3 11.40319 12.15769 11.93984 11.005218
## 4 12.08804 15.29936 11.21817 10.519000
## 5 13.88581 11.91429 10.73639 9.643751
## 6 12.35929 11.58287 10.76093 10.304028
## 7 10.10925 12.50404 10.16422 13.461520
## 8 11.38552 10.82239 11.50636 11.120455
## 9 11.23659 11.96546 11.03993 10.784273
## 10 10.80561 13.47651 9.51601 12.845901
d_indo = dataset$indo_B - dataset$indo_A
d_thai = dataset$thai_B - dataset$thai_A
X = data.frame(d_indo, d_thai)
X
## d_indo d_thai
## 1 1.7486783 -0.05858639
## 2 4.5368196 -0.78281483
## 3 0.7545052 -0.93461698
## 4 3.2113153 -0.69917392
## 5 -1.9715208 -1.09263823
## 6 -0.7764279 -0.45690228
## 7 2.3947920 3.29729628
## 8 -0.5631355 -0.38590189
## 9 0.7288762 -0.25565919
## 10 2.6709041 3.32989051
# Vektor rata-rata
xbar = apply(X, 2, mean)
xbar
## d_indo d_thai
## 1.2734806 0.1960893
# Matriks kovarians
cov_m = cov(X)
cov_m
## d_indo d_thai
## d_indo 4.056864 1.136500
## d_thai 1.136500 2.796812
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 = 4.101707
## F value = 1.823 , df1 = 2 , df2 = 8 , p-value: 0.223
##
## Descriptive Statistics
##
## d_indo d_thai
## N 10.000000 10.0000000
## Means 1.273481 0.1960893
## Sd 2.014166 1.6723672
##
##
## Detection important variable(s)
##
## Lower Upper Mu0 Important Variables?
## d_indo -0.7439739 3.290935 0 FALSE
## d_thai -1.4790085 1.871187 0 FALSE
simpulan: Tidak terdapat bukti yang cukup pada taraf
signifikansi 5% untuk menyatakan bahwa rata-rata perubahan harga beras
di Indonesia dan Thailand berbeda secara signifikan dari nol. Dengan
kata lain, secara statistik, kenaikan yang teramati pada kedua negara
tidak signifikan.
result$CI
## Lower Upper Mu0 Important Variables?
## d_indo -0.7439739 3.290935 0 FALSE
## d_thai -1.4790085 1.871187 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)
# Selang kepercayaan untuk Indonesia
bon(xbar, cov_m, n, 0.05, 1)
## lower.d_indo upper.d_indo
## -0.4366972 2.9836585
# Selang kepercayaan untuk Thailand
bon(xbar, cov_m, n, 0.05, 2)
## lower.d_thai upper.d_thai
## -1.223876 1.616054
Kasus:
Populasi 1: Orang Indonesia
Populasi 2: Orang Jerman
Variabel: Tinggi Badan (cm) dan Berat Badan (kg)
set.seed(1035)
n1 <- 12 # sampel orang Indonesia
n2 <- 10 # sampel orang Jerman
# Bangkitkan data
# Asumsikan orang Jerman lebih tinggi & sedikit lebih berat
indo_tinggi <- rnorm(n1, mean=165, sd=7)
indo_berat <- rnorm(n1, mean=60, sd=6)
jerman_tinggi <- rnorm(n2, mean=175, sd=7)
jerman_berat <- rnorm(n2, mean=70, sd=6)
# Susun data ke bentuk data.frame
data_indo <- data.frame(Tinggi = indo_tinggi,
Berat = indo_berat)
data_jerman <- data.frame(Tinggi = jerman_tinggi,
Berat = jerman_berat)
head(data_indo)
## Tinggi Berat
## 1 161.9073 65.63901
## 2 151.1769 61.30904
## 3 160.8223 58.41833
## 4 165.6163 58.56558
## 5 178.2007 54.98534
## 6 167.5151 63.03814
head(data_jerman)
## Tinggi Berat
## 1 168.6667 58.86250
## 2 166.7334 62.82417
## 3 172.1069 81.76912
## 4 162.2973 67.72273
## 5 168.9652 65.70564
## 6 177.7797 78.07541
# Rataan
xbar1 <- apply(data_indo, 2, mean)
xbar2 <- apply(data_jerman, 2, mean)
xbar1
## Tinggi Berat
## 162.32364 60.82676
xbar2
## Tinggi Berat
## 169.72152 68.93847
# Kovarians
cov_m1 <- cov(data_indo)
cov_m2 <- cov(data_jerman)
cov_m1
## Tinggi Berat
## Tinggi 64.52254 2.12206
## Berat 2.12206 32.44128
cov_m2
## Tinggi Berat
## Tinggi 20.28833 15.36072
## Berat 15.36072 45.07106
s_gab <- ((n1-1)*cov_m1 + (n2-1)*cov_m2) / (n1 + n2 - 2)
s_gab
## Tinggi Berat
## Tinggi 44.617146 8.079459
## Berat 8.079459 38.124680
library(Hotelling)
## Loading required package: corpcor
t2_homogen = hotelling.test(data_indo,data_jerman,var.equal=TRUE)
t2_homogen
## Test stat: 13.514
## Numerator df: 2
## Denominator df: 19
## P-value: 0.007416
Simpulan: P-value: 0.007416 < 0.05, tolak H0
dalam taraf nyata 5%, cukup bukti untuk menyatakan ada perbedaan rata
rata tinggi dan berat badan orang indonesia dan jerman.
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)
}
# Tinggi
T.ci(xbar1, xbar2, s_gab, n1, n2, avec = c(1,0), level = 0.95)
## lower upper
## -15.185646 0.389886
# Berat
T.ci(xbar1, xbar2, s_gab, n1, n2, avec = c(0,1), level = 0.95)
## lower upper
## -15.3105900 -0.9128242
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))
c(lower = lower, upper = upper)
}
# Tinggi
bon(xbar1, xbar2, s_gab, n1, n2, 0.05, 1)
## lower.Tinggi upper.Tinggi
## -14.3280824 -0.4676778
# Berat
bon(xbar1, xbar2, s_gab, n1, n2, 0.05, 2)
## lower.Berat upper.Berat
## -14.517872 -1.705542
Kasus: Membandingkan tingkat kadar kolesterol
(mg/dL) dan tekanan darah sistolik (mmHg) antara dua kelompok:
-Kelompok 1: Orang yang rutin berolahraga
-Kelompok 2: Orang yang tidak rutin berolahraga
set.seed(1035)
n1 <- 15 # sampel rutin olahraga
n2 <- 12 # sampel tidak rutin olahraga
# Kelompok rutin olahraga (mean lebih rendah, ragam lebih kecil)
kolesterol_olga <- rnorm(n1, mean = 190, sd = 15)
tekanan_olga <- rnorm(n1, mean = 120, sd = 10)
# Kelompok tidak rutin olahraga (mean lebih tinggi, ragam lebih besar)
kolesterol_non <- rnorm(n2, mean = 210, sd = 25)
tekanan_non <- rnorm(n2, mean = 130, sd = 15)
# Bentuk data frame
data_olga <- data.frame(Kolesterol = kolesterol_olga,
Tekanan = tekanan_olga)
data_non <- data.frame(Kolesterol = kolesterol_non,
Tekanan = tekanan_non)
head(data_olga)
## Kolesterol Tekanan
## 1 183.3727 117.6093
## 2 160.3791 111.6422
## 3 181.0478 125.0636
## 4 191.3207 120.3993
## 5 218.2872 105.1601
## 6 195.3894 122.5571
head(data_non)
## Kolesterol Tekanan
## 1 178.1082 122.5976
## 2 209.7365 124.8365
## 3 197.6305 139.2586
## 4 185.4750 103.3382
## 5 163.5938 137.4356
## 6 180.1007 102.9509
# Rataan
xbar1 <- apply(data_olga, 2, mean)
xbar2 <- apply(data_non, 2, mean)
xbar1
## Kolesterol Tekanan
## 186.3063 117.3203
xbar2
## Kolesterol Tekanan
## 202.3052 125.2335
# Kovarians
cov_m1 <- cov(data_olga)
cov_m2 <- cov(data_non)
cov_m1
## Kolesterol Tekanan
## Kolesterol 262.44129 -67.80479
## Tekanan -67.80479 104.57826
cov_m2
## Kolesterol Tekanan
## Kolesterol 733.8945 -138.5965
## Tekanan -138.5965 424.4593
n1 <- nrow(data_olga)
n2 <- nrow(data_non)
library(Hotelling)
t2_not_homogen <- hotelling.test(data_olga, data_non, var.equal = FALSE)
t2_not_homogen
## Test stat: 6.4554
## Numerator df: 2
## Denominator df: 16.5717860318169
## P-value: 0.0719
Simpulan: Pada taraf signifikansi 5%, hasil uji Hotelling T² (F = 6.4554, p-value = 0.0719) menunjukkan gagal menolak H₀.Artinya, tidak terdapat bukti yang cukup untuk menyimpulkan adanya perbedaan yang signifikan antara rata-rata kolesterol dan tekanan darah pada kedua kelompok.
T.ci <- function(mu1, mu2, S1, S2, n1, n2, avec = rep(1, length(mu1)), 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)
}
# Kolesterol
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1, n2, avec = c(1,0), level = 0.95)
## lower upper
## -37.707235 5.709463
# Tekanan darah
T.ci(xbar1, xbar2, cov_m1, cov_m2, n1, n2, avec = c(0,1), level = 0.95)
## lower upper
## -23.841139 8.014757
# Kasus: Produktivitas Karyawan
# Sistem Hybrid vs Kantor Penuh
library(MASS)
## Warning: package 'MASS' was built under R version 4.4.3
set.seed(1035)
n_hybrid <- 20
n_kantor <- 20
# Nilai karyawan Hybrid: misalnya rata-rata lebih rendah
mu_hybrid <- c(70, 60) # (Kecepatan Tugas, Problem Solving)
Sigma <- matrix(c(180, 40, 40, 160), 2) #ragamnya sama
data_hybrid <- mvrnorm(n_hybrid, mu = mu_hybrid, Sigma = Sigma)
# Nilai karyawan Kantor: rata-rata lebih tinggi
mu_kantor <- c(80, 65)
data_kantor <- mvrnorm(n_kantor, mu = mu_kantor, Sigma = Sigma)
# Gabungkan menjadi satu data frame
data_karyawan <- data.frame(
MetodeKerja = rep(c("Hybrid", "Kantor"), each = 20),
KecepatanTugas = c(data_hybrid[,1], data_kantor[,1]),
ProblemSolving = c(data_hybrid[,2], data_kantor[,2])
)
head(data_karyawan)
## MetodeKerja KecepatanTugas ProblemSolving
## 1 Hybrid 76.84710 61.66458
## 2 Hybrid 101.71241 66.01936
## 3 Hybrid 71.93499 71.61623
## 4 Hybrid 82.37267 42.07410
## 5 Hybrid 42.07853 51.22521
## 6 Hybrid 57.63697 67.34907
# Uji Hotelling's T²
library(Hotelling)
uji_hotelling <- hotelling.test(
. ~ MetodeKerja,
data = data_karyawan[, c("KecepatanTugas", "ProblemSolving", "MetodeKerja")]
)
uji_hotelling
## Test stat: 5.4351
## Numerator df: 2
## Denominator df: 37
## P-value: 0.08432
Hipotesis nol (H0): Tidak ada perbedaan
rata-rata produktivitas antara karyawan Hybrid dan Kantor Penuh.
Hipotesis alternatif (H1): Ada perbedaan
rata-rata produktivitas.
Karena p-value = 0.08432 > 0.05, kita
gagal menolak H0, tidak terdapat bukti
signifikan bahwa rata-rata produktivitas (Kecepatan Tugas &
Problem Solving) berbeda antara karyawan yang bekerja Hybrid dan yang
bekerja penuh di kantor.
Hasil uji menunjukkan kantor tidak perlu memaksakan seluruh
karyawan bekerja di kantor, karena produktivitas relatif sama.
Ini memberi fleksibilitas dalam pengaturan sistem kerja, efisiensi
biaya, dan potensi peningkatan kepuasan karyawan tanpa mengorbankan
kinerja.
Karena tidak ada perbedaan signifikan dalam produktivitas antara karyawan Hybrid dan yang bekerja penuh di kantor, manajemen bisa mempertahankan atau menerapkan sistem kerja hybrid tanpa khawatir menurunkan produktivitas sehingga bisa mengefisiensikan ruang dan biaya.