Tugas1 TPG

Author

Indah Dzulkharifah

Perbandingan Skor Fisik dan Mental antara Siswa yang Berolahraga Pagi dan Sore

Perbandingan Dua Vektor Nilai Tengah Sampel Berpasangan

Bangkitan Data

Total observasi = 60 atlet pagi = 30 atlet sore = 30

library(MASS)
Warning: package 'MASS' was built under R version 4.4.3
set.seed(50)
n_pagi <- 30
n_sore <- 30

# Skor atlet dengan latihan pagi: rata-rata agak lebih rendah
mu_pagi <- c(60, 65)  
Sigma <- matrix(c(150, 40, 40, 160), 2) # Matriks kovariansi sama
data_pagi <- mvrnorm(n_pagi, mu = mu_pagi, Sigma = Sigma)

# Skor atlet dengan latihan sore: rata-rata lebih tinggi
mu_sore <- c(70, 75)
data_sore <- mvrnorm(n_sore, mu = mu_sore, Sigma = Sigma)

# Gabungkan menjadi satu data frame
data_atlet <- data.frame(
  WaktuLatihan = rep(c("Pagi", "Sore"), each = 30),
  SkorFisik = c(data_pagi[,1], data_sore[,1]),
  SkorMental = c(data_pagi[,2], data_sore[,2])
)
data_atlet
   WaktuLatihan SkorFisik SkorMental
1          Pagi  63.48600   72.16948
2          Pagi  59.05171   50.14809
3          Pagi  69.38103   57.33374
4          Pagi  60.05281   74.72450
5          Pagi  52.82112   39.13166
6          Pagi  57.27673   62.22415
7          Pagi  59.99582   71.73019
8          Pagi  39.76482   71.84756
9          Pagi  65.76211   78.10012
10         Pagi  43.47135   52.63975
11         Pagi  61.85078   68.86937
12         Pagi  68.45001   67.88208
13         Pagi  54.49059   60.56812
14         Pagi  85.03138   46.55159
15         Pagi  55.02122   60.90307
16         Pagi  52.63060   64.74128
17         Pagi  50.92759   70.08567
18         Pagi  66.23673   45.22863
19         Pagi  61.11078   42.28272
20         Pagi  60.94814   58.13375
21         Pagi  56.64509   61.43836
22         Pagi  51.86109   61.24404
23         Pagi  61.07861   34.40957
24         Pagi  94.25901   66.25325
25         Pagi  57.21767   77.96243
26         Pagi  75.30390  101.21959
27         Pagi  70.24364   62.60356
28         Pagi  67.81800   51.34781
29         Pagi  75.95935   61.51385
30         Pagi  61.37989   64.31641
31         Sore  62.89306   87.19670
32         Sore  60.55065   85.08139
33         Sore  66.87732   78.46161
34         Sore  48.75686   81.93450
35         Sore  57.41380   59.41167
36         Sore  54.92118   81.62855
37         Sore  80.80814   81.66336
38         Sore  56.62554   62.81336
39         Sore  80.71557   67.55969
40         Sore  46.95723   77.99654
41         Sore  83.20092   65.28584
42         Sore  63.71990   68.58369
43         Sore  53.93578   58.16541
44         Sore  72.21854   83.24163
45         Sore  61.83076   83.62012
46         Sore  62.72232   66.82627
47         Sore  76.82061   64.05713
48         Sore  67.45121   94.89267
49         Sore  71.40963   54.30775
50         Sore  94.24953   61.28663
51         Sore  51.17784   71.22392
52         Sore  86.27353   80.16020
53         Sore  89.56074   66.64681
54         Sore  62.81518   74.34477
55         Sore  80.34720   86.59947
56         Sore  87.31937   76.18297
57         Sore  68.70390   68.45414
58         Sore  63.26526   79.93800
59         Sore  60.95670   44.91519
60         Sore  74.09564   70.45607
# Pisahkan data berdasarkan kelompok
group_pagi <- subset(data_atlet, WaktuLatihan == "Pagi", select = c(SkorFisik, SkorMental))
group_pagi 
   SkorFisik SkorMental
1   63.48600   72.16948
2   59.05171   50.14809
3   69.38103   57.33374
4   60.05281   74.72450
5   52.82112   39.13166
6   57.27673   62.22415
7   59.99582   71.73019
8   39.76482   71.84756
9   65.76211   78.10012
10  43.47135   52.63975
11  61.85078   68.86937
12  68.45001   67.88208
13  54.49059   60.56812
14  85.03138   46.55159
15  55.02122   60.90307
16  52.63060   64.74128
17  50.92759   70.08567
18  66.23673   45.22863
19  61.11078   42.28272
20  60.94814   58.13375
21  56.64509   61.43836
22  51.86109   61.24404
23  61.07861   34.40957
24  94.25901   66.25325
25  57.21767   77.96243
26  75.30390  101.21959
27  70.24364   62.60356
28  67.81800   51.34781
29  75.95935   61.51385
30  61.37989   64.31641
group_sore <- subset(data_atlet, WaktuLatihan == "Sore", select = c(SkorFisik, SkorMental))
group_sore 
   SkorFisik SkorMental
31  62.89306   87.19670
32  60.55065   85.08139
33  66.87732   78.46161
34  48.75686   81.93450
35  57.41380   59.41167
36  54.92118   81.62855
37  80.80814   81.66336
38  56.62554   62.81336
39  80.71557   67.55969
40  46.95723   77.99654
41  83.20092   65.28584
42  63.71990   68.58369
43  53.93578   58.16541
44  72.21854   83.24163
45  61.83076   83.62012
46  62.72232   66.82627
47  76.82061   64.05713
48  67.45121   94.89267
49  71.40963   54.30775
50  94.24953   61.28663
51  51.17784   71.22392
52  86.27353   80.16020
53  89.56074   66.64681
54  62.81518   74.34477
55  80.34720   86.59947
56  87.31937   76.18297
57  68.70390   68.45414
58  63.26526   79.93800
59  60.95670   44.91519
60  74.09564   70.45607
# Hitung selisih skor antara Latihan Sore dan Latihan Pagi
d_fisik = group_sore$SkorFisik - group_pagi$SkorFisik
d_mental = group_sore$SkorMental - group_pagi$SkorMental

# Gabungkan ke dalam data frame
X = data.frame(d_fisik, d_mental)
X
       d_fisik    d_mental
1   -0.5929425  15.0272225
2    1.4989412  34.9333012
3   -2.5037079  21.1278722
4  -11.2959522   7.2099985
5    4.5926778  20.2800041
6   -2.3555548  19.4044065
7   20.8123213   9.9331656
8   16.8607233  -9.0341992
9   14.9534671 -10.5404257
10   3.4858797  25.3567843
11  21.3501432  -3.5835256
12  -4.7301142   0.7016053
13  -0.5548163  -2.4027108
14 -12.8128332  36.6900456
15   6.8095378  22.7170490
16  10.0917181   2.0849886
17  25.8930130  -6.0285344
18   1.2144764  49.6640366
19  10.2988574  12.0250331
20  33.3013989   3.1528780
21  -5.4672482   9.7855586
22  34.4124361  18.9161622
23  28.4821301  32.2372423
24 -31.4438347   8.0915160
25  23.1295283   8.6370405
26  12.0154708 -25.0366169
27  -1.5397366   5.8505754
28  -4.5527396  28.5901873
29 -15.0026490 -16.5986603
30  12.7157552   6.1396622
# Vektor rataan (mean untuk setiap kolom di X)
xbar = apply(X, 2, mean)
xbar
  d_fisik  d_mental 
 6.302212 10.844389 
cov_m = cov(X)
cov_m
          d_fisik d_mental
d_fisik  231.2378 -34.4936
d_mental -34.4936 279.5277

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
# H0 : Tidak ada perbedaan rata-rata skor (vektor mean = (0,0))
mean0 = c(0,0)

# Uji Hotelling T²
result = OneSampleHT2(X, mu0 = mean0, alpha = 0.05)

# Ringkasan hasil uji
summary(result)
       One Sample Hotelling T Square Test 

Hotelling T Sqaure Statistic = 20.33687 
 F value = 9.818 , df1 = 2 , df2 = 28 , p-value: 0.000588 

                  Descriptive Statistics

        d_fisik d_mental
N     30.000000 30.00000
Means  6.302212 10.84439
Sd    15.206506 16.71908


                Detection important variable(s)

             Lower    Upper Mu0 Important Variables?
d_fisik  -1.000802 13.60522   0                FALSE
d_mental  2.814953 18.87382   0               *TRUE*

Uji Hotelling T² menunjukkan perbedaan signifikan skor fisik dan mental antara atlet yang berlatih pagi dan sore, dengan atlet sore memperoleh skor lebih tinggi

Selang Kepercayaan Simultan

result$CI
             Lower    Upper Mu0 Important Variables?
d_fisik  -1.000802 13.60522   0                FALSE
d_mental  2.814953 18.87382   0               *TRUE*

berdasarkan selang kepercayaan simultan selang skor fisik diantara (-1.00082 , 13.60522), karena 0 ada di dalam selang, artinya perbedaan skor fisik antara latihan pagi dan sore tidak signifikan. Sementara skor mental diantara (2.814953 , 18.87382), karena 0 tidak ada di dalam selang (interval seluruhnya positif), artinya terdapat perbedaan signifikan skor mental, di mana latihan sore memberikan skor mental yang lebih tinggi.

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

# Jumlah data (pasangan sore - pagi)
n = nrow(X)
bon(xbar, cov_m,n,0.05,1)
lower.d_fisik upper.d_fisik 
   -0.2605709    12.8649940 
bon(xbar, cov_m,n,0.05,2)
lower.d_mental upper.d_mental 
      3.628813      18.059964 

berdasarka hasil selang kepercayaan Bonferroni, selang skor fisik diantara (-0.2606 , 12.8649), karena 0 termasuk dalam selang, tidak terdapat perbedaan signifikan skor fisik antara latihan pagi dan sore. Sementara selang skor mental diantara (3.6288 , 18.0599), karena 0 tidak termasuk dalam selang (interval positif), terdapat perbedaan signifikan, di mana latihan sore memberikan skor mental yang lebih tinggi.

Perbandingan Dua Vektor Nilai Tengah Sampel Saling Bebas Ragam Sama

# Memisahkan Data dari Populasi 1 (Pagi) dan Populasi 2 (Sore)
data_pagi = subset(data_atlet, WaktuLatihan == "Pagi", select = c(SkorFisik, SkorMental))
data_sore = subset(data_atlet, WaktuLatihan == "Sore", select = c(SkorFisik, SkorMental))
## Menghitung vektor rataan dan matriks kovarians
xbar_pagi = apply(data_pagi, 2, mean)
xbar_pagi
 SkorFisik SkorMental 
  61.98425   61.92015 
xbar_sore = apply(data_sore, 2, mean)
xbar_sore
 SkorFisik SkorMental 
  68.28646   72.76454 
cov_pagi = cov(data_pagi)
cov_pagi
            SkorFisik SkorMental
SkorFisik  124.444437   9.777743
SkorMental   9.777743 181.485373
cov_sore = cov(data_sore)
cov_sore
            SkorFisik SkorMental
SkorFisik  161.565394  -7.039703
SkorMental  -7.039703 127.738371
n1 = nrow(data_pagi)
n2 = nrow(data_sore)
# S Gabungan
s_gab = ((n1-1)*cov_pagi + (n2-1)*cov_sore) / (n1+n2-2)
s_gab
           SkorFisik SkorMental
SkorFisik  143.00492    1.36902
SkorMental   1.36902  154.61187

Uji T2 Hotelling Dua Populasi Sampel Saling Bebas Ragam Sama

library(Hotelling)
Loading required package: corpcor
t2_homogen = hotelling.test(data_pagi, data_sore, var.equal = TRUE)
t2_homogen
Test stat:  15.45 
Numerator df:  2 
Denominator df:  57 
P-value:  0.001194 

Selang Kepercayaan Simultan

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)
}
# Skor Fisik
T.ci(xbar_pagi, xbar_sore, s_gab, n1, n2, avec = c(1,0), level = 0.95)
     lower      upper 
-14.130835   1.526412 
# Skor Mental
T.ci(xbar_pagi, xbar_sore, s_gab, n1, n2, avec = c(0,1), level = 0.95)
     lower      upper 
-18.984519  -2.704258 

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
}
# Skor Fisik
bon(xbar_pagi, xbar_sore, s_gab, n1, n2, 0.05, 1)
      lower       upper 
-13.4071816   0.8027585 
# Skor Mental
bon(xbar_pagi, xbar_sore, s_gab, n1, n2, 0.05, 2)
     lower      upper 
-18.232071  -3.456707 

Uji T² Hotelling

p-value = 0.001187 (< 0.05), artinya, secara simultan terdapat perbedaan signifikan antara rata-rata skor fisik dan mental atlet yang berlatih pagi dan sore, meskipun asumsi ragam sama tidak terpenuhi.

Selang Kepercayaan Simultan (95%)

Skor Fisik: (-14.13 , 1.53), karena selang mencakup nol, tidak ada perbedaan signifikan skor fisik antara atlet pagi dan sore.

Skor Mental: (-18.98 , -2.70), seluruh selang negatif, artinya skor mental atlet sore secara signifikan lebih tinggi daripada atlet pagi.

Hasil uji parsial (Bonferroni CI)

Skor Fisik: Selang kepercayaan Bonferroni untuk selisih skor fisik adalah (-13.41 , 0.80). Karena selang ini mencakup nol, maka perbedaan skor fisik tidak signifikan antara atlet pagi dan sore.

Skor Mental: Selang kepercayaan Bonferroni untuk selisih skor mental adalah (-18.23 , -3.45). Selang ini seluruhnya negatif (tidak mencakup nol), artinya atlet sore memiliki skor mental yang secara signifikan lebih tinggi dibanding atlet pagi.

Perbandingan Dua Vektor Nilai Tengah Sampel Saling Bebas Ragam Tidak Sama

# Memisahkan Data dari Populasi 1 (Pagi) dan Populasi 2 (Sore)
data_pagi = subset(data_atlet, WaktuLatihan == "Pagi", select = c(SkorFisik, SkorMental))
data_sore = subset(data_atlet, WaktuLatihan == "Sore", select = c(SkorFisik, SkorMental))
## Menghitung vektor rataan dan matriks kovarians
xbar_pagi = apply(data_pagi, 2, mean)
xbar_pagi
 SkorFisik SkorMental 
  61.98425   61.92015 
xbar_sore = apply(data_sore, 2, mean)
xbar_sore
 SkorFisik SkorMental 
  68.28646   72.76454 
cov_pagi = cov(data_pagi)
cov_pagi
            SkorFisik SkorMental
SkorFisik  124.444437   9.777743
SkorMental   9.777743 181.485373
cov_sore = cov(data_sore)
cov_sore
            SkorFisik SkorMental
SkorFisik  161.565394  -7.039703
SkorMental  -7.039703 127.738371
n1 = nrow(data_pagi)
n2 = nrow(data_sore)

Uji T2 Hotelling Dua Populasi Sampel Saling Bebas Ragam Tidak Sama

library(Hotelling)
t2_not_homogen = hotelling.test(data_pagi, data_sore, var.equal=FALSE)
t2_not_homogen
Test stat:  15.45 
Numerator df:  2 
Denominator df:  57.4480567673906 
P-value:  0.001187 

Selang Kepercayaan Simultan

# Fungsi CI untuk dua sampel bebas, ragam tidak sama
T.ci_unequal <- function(mu1, mu2, S1, S2, n1, n2, avec=rep(1,length(mu1)), level=0.95){
  p <- length(mu1)
  mu <- mu1 - mu2
  cval <- qchisq(level, df = p)
  zhat <- as.numeric(crossprod(avec, mu))
  zvar <- as.numeric((t(avec) %*% S1 %*% avec)/n1 + (t(avec) %*% S2 %*% avec)/n2)
  const <- sqrt(cval * zvar)
  return(c(lower = zhat - const, upper = zhat + const))
}

# --- Selang kepercayaan simultan ---

# 1️⃣ Skor Fisik (avec = c(1,0))
T.ci_unequal(xbar_pagi, xbar_sore, cov_pagi, cov_sore, n_pagi, n_sore, avec = c(1,0), level = 0.95)
     lower      upper 
-13.860028   1.255605 
# 2️⃣ Skor Mental (avec = c(0,1))
T.ci_unequal(xbar_pagi, xbar_sore, cov_pagi, cov_sore, n_pagi, n_sore, avec = c(0,1), level = 0.95)
     lower      upper 
-18.702936  -2.985841 

Hasil Uji T² Hotelling

p-value = 0.001187 (< 0.05), artinya, secara simultan terdapat perbedaan signifikan antara rata-rata skor fisik dan mental atlet yang berlatih pagi dan sore, meskipun asumsi ragam sama tidak terpenuhi.

Hasil Uji (Bonferroni CI)

Skor Fisik: Selang kepercayaan Bonferroni untuk selisih skor fisik adalah (-13.860028 , 1.255605), karena 0 ada di dalam selang, maka tidak terdapat perbedaan signifikan skor fisik antara latihan pagi dan sore.

Skor Mental: Selang kepercayaan Bonferroni untuk selisih skor mental adalah (-18.702936 , -2.985841), karena 0 tidak ada dalam selang dan interval seluruhnya negatif, artinya ada perbedaan signifikan. Rata-rata skor mental kelompok pagi lebih rendah dibanding sore, atau dengan kata lain latihan sore menghasilkan skor mental lebih tinggi.