library(rstatix)
##
## Attaching package: 'rstatix'
## The following object is masked from 'package:stats':
##
## filter
library(car) # Untuk MANCOVA dan uji Levene
## Loading required package: carData
library(biotools) # Untuk uji Box's M
## Loading required package: MASS
##
## Attaching package: 'MASS'
## The following object is masked from 'package:rstatix':
##
## select
## ---
## biotools version 4.3
data_student <- read.csv("student-mat.csv", sep=",")
# Seleksi Variabel (Y=2, X=3)
df <- data_student[, c("G1", "G2", "sex", "address", "studytime")]
df$sex <- as.factor(df$sex)
df$address <- as.factor(df$address)
df$studytime <- as.numeric(df$studytime)
# H0: Data berdistribusi normal
df %>% group_by(sex, address) %>% shapiro_test(G1, G2)
## # A tibble: 8 × 5
## sex address variable statistic p
## <fct> <fct> <chr> <dbl> <dbl>
## 1 F R G1 0.937 0.0188
## 2 F R G2 0.954 0.0749
## 3 F U G1 0.964 0.000328
## 4 F U G2 0.964 0.000313
## 5 M R G1 0.965 0.195
## 6 M R G2 0.975 0.465
## 7 M U G1 0.978 0.0216
## 8 M U G2 0.964 0.000908
Beberapa kelompok menunjukkan p-value < 0.05, sehingga asumsi normalitas univariat tidak sepenuhnya terpenuhi. Namun, karena ukuran sampel cukup besar (>30 per grup), maka MANOVA dianggap cukup robust terhadap pelanggaran ini.
par(mfrow=c(1,2))
qqnorm(df$G1, main="Q-Q Plot G1")
qqline(df$G1)
qqnorm(df$G2, main="Q-Q Plot G2")
qqline(df$G2)
Titik-titik pada Q-Q plot sebagian besar mengikuti garis diagonal, meskipun terdapat sedikit penyimpangan di bagian ekor. Hal ini menunjukkan bahwa data mendekati distribusi normal.
asumsi_slope <- lm(cbind(G1, G2) ~ sex * studytime + address * studytime, data = df)
Anova(asumsi_slope, test = "Wilks")
##
## Type II MANOVA Tests: Wilks test statistic
## Df test stat approx F num Df den Df Pr(>F)
## sex 1 0.97471 5.0342 2 388 0.0069432 **
## studytime 1 0.95896 8.3032 2 388 0.0002944 ***
## address 1 0.97797 4.3709 2 388 0.0132679 *
## sex:studytime 1 0.99660 0.6616 2 388 0.5166212
## studytime:address 1 0.99629 0.7222 2 388 0.4863112
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interaksi antara faktor dan kovariat harus TIDAK signifikan (p > 0.05)
# Tetap menggunakan biotools karena ini standar multivariat
box_m_hasil <- boxM(df[, c("G1", "G2")], interaction(df$sex, df$address))
print(box_m_hasil)
##
## Box's M-test for Homogeneity of Covariance Matrices
##
## data: df[, c("G1", "G2")]
## Chi-Sq (approx.) = 27.344, df = 9, p-value = 0.001227
Hasil Box’s M Test menunjukkan p-value < 0.05, sehingga asumsi homogenitas matriks kovarians tidak terpenuhi. Oleh karena itu, analisis MANOVA akan menggunakan statistik uji yang lebih robust yaitu Pillai’s Trace.
asumsi_slope <- lm(cbind(G1, G2) ~ sex * studytime + address * studytime, data = df)
Anova(asumsi_slope, test = "Wilks")
##
## Type II MANOVA Tests: Wilks test statistic
## Df test stat approx F num Df den Df Pr(>F)
## sex 1 0.97471 5.0342 2 388 0.0069432 **
## studytime 1 0.95896 8.3032 2 388 0.0002944 ***
## address 1 0.97797 4.3709 2 388 0.0132679 *
## sex:studytime 1 0.99660 0.6616 2 388 0.5166212
## studytime:address 1 0.99629 0.7222 2 388 0.4863112
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Interaksi antara faktor dan kovariat harus TIDAK signifikan (p > 0.05)
leveneTest(G1 ~ sex * address, data = df)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 0.4782 0.6977
## 391
leveneTest(G2 ~ sex * address, data = df)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 0.5256 0.6649
## 391
Jika p-value > 0.05, maka varians antar kelompok homogen. Jika p-value < 0.05, maka asumsi homogenitas varians tidak terpenuhi.
model_manova <- manova(cbind(G1, G2) ~ sex * address, data = df)
# Hasil Utama
summary(model_manova, test = "Pillai")
## Df Pillai approx F num Df den Df Pr(>F)
## sex 1 0.0091393 1.7986 2 390 0.16690
## address 1 0.0217459 4.3347 2 390 0.01374 *
## sex:address 1 0.0005605 0.1093 2 390 0.89644
## Residuals 391
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil menunjukkan bahwa variabel address berpengaruh signifikan terhadap kombinasi nilai G1 dan G2 (p < 0.05), sedangkan variabel sex tidak berpengaruh signifikan. Tidak terdapat interaksi signifikan antara sex dan address.
Artinya, lokasi tempat tinggal siswa (urban/rural) mempengaruhi performa akademik, sementara gender tidak memberikan perbedaan yang signifikan.
summary.aov(model_manova)
## Response G1 :
## Df Sum Sq Mean Sq F value Pr(>F)
## sex 1 36.6 36.611 3.3451 0.06817 .
## address 1 22.7 22.723 2.0761 0.15042
## sex:address 1 1.9 1.913 0.1748 0.67614
## Residuals 391 4279.5 10.945
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response G2 :
## Df Sum Sq Mean Sq F value Pr(>F)
## sex 1 46.3 46.265 3.3295 0.06881 .
## address 1 92.3 92.318 6.6438 0.01032 *
## sex:address 1 3.0 3.024 0.2176 0.64110
## Residuals 391 5433.1 13.895
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Untuk variabel G2, address berpengaruh signifikan (p < 0.05), sedangkan pada G1 tidak ditemukan pengaruh signifikan. Hal ini menunjukkan bahwa lokasi lebih berpengaruh pada nilai periode kedua.
# Aturannya: masukkan kovariat (studytime) terlebih dahulu
model_mancova <- manova(cbind(G1, G2) ~ studytime + sex * address, data = df)
# Hasil MANCOVA
summary(model_mancova, test = "Pillai")
## Df Pillai approx F num Df den Df Pr(>F)
## studytime 1 0.0265431 5.3034 2 389 0.005341 **
## sex 1 0.0233968 4.6597 2 389 0.010004 *
## address 1 0.0230375 4.5864 2 389 0.010746 *
## sex:address 1 0.0001072 0.0209 2 389 0.979357
## Residuals 390
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Melihat apakah setelah dikontrol studytime, sex dan address tetap berpengaruh
summary.aov(model_mancova)
## Response G1 :
## Df Sum Sq Mean Sq F value Pr(>F)
## studytime 1 112.0 111.974 10.6340 0.001208 **
## sex 1 95.3 95.270 9.0477 0.002801 **
## address 1 26.8 26.793 2.5445 0.111486
## sex:address 1 0.1 0.059 0.0056 0.940496
## Residuals 390 4106.6 10.530
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response G2 :
## Df Sum Sq Mean Sq F value Pr(>F)
## studytime 1 102.9 102.927 7.6275 0.006020 **
## sex 1 108.4 108.352 8.0295 0.004841 **
## address 1 100.3 100.265 7.4302 0.006703 **
## sex:address 1 0.4 0.367 0.0272 0.869178
## Residuals 390 5262.8 13.494
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Alasan penggunaan Pillai Karena asumsi homogenitas matriks kovarians tidak terpenuhi, maka digunakan Pillai’s Trace yang lebih robust terhadap pelanggaran asumsi.
Setelah mengontrol variabel studytime, ditemukan bahwa studytime
berpengaruh signifikan terhadap nilai G1 dan G2. Selain itu, variabel
sex dan address juga menjadi signifikan.
Artinya, waktu belajar memiliki pengaruh penting terhadap performa
akademik. Setelah efek waktu belajar dikontrol, perbedaan berdasarkan
gender dan lokasi menjadi lebih terlihat.
aggregate(cbind(G1, G2) ~ sex + address, data = df, mean)
## sex address G1 G2
## 1 F R 10.29545 9.636364
## 2 M R 10.65909 10.022727
## 3 F U 10.70732 10.591463
## 4 M U 11.40559 11.398601
Siswa laki-laki di daerah urban memiliki rata-rata nilai tertinggi, sedangkan siswa perempuan di daerah rural memiliki rata-rata terendah. Hal ini memperkuat hasil MANOVA bahwa lokasi berpengaruh terhadap nilai.
tukey_g1 <- aov(G1 ~ sex * address, data = df)
TukeyHSD(tukey_g1)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = G1 ~ sex * address, data = df)
##
## $sex
## diff lwr upr p adj
## M-F 0.6097542 -0.04570744 1.265216 0.0681685
##
## $address
## diff lwr upr p adj
## U-R 0.5761553 -0.2103275 1.362638 0.1505904
##
## $`sex:address`
## diff lwr upr p adj
## M:R-F:R 0.36363636 -1.4562074 2.183480 0.9553505
## F:U-F:R 0.41186253 -1.0373393 1.861064 0.8836780
## M:U-F:R 1.11013986 -0.3613996 2.581679 0.2104797
## F:U-M:R 0.04822616 -1.4009756 1.497428 0.9997729
## M:U-M:R 0.74650350 -0.7250359 2.218043 0.5578015
## M:U-F:U 0.69827733 -0.2783406 1.674895 0.2540118
par(mfrow=c(1,2))
plot(G1 ~ sex, data=df, main="G1 berdasarkan Sex", col="lightblue")
plot(G2 ~ address, data=df, main="G2 berdasarkan Address", col="lightgreen")
Pada G1, siswa laki-laki cenderung memiliki median nilai sedikit lebih tinggi dibanding perempuan. Pada G2, siswa yang tinggal di daerah urban (U) memiliki nilai yang lebih tinggi dibanding rural (R). Hal ini konsisten dengan hasil MANOVA yang menunjukkan bahwa address berpengaruh signifikan.
par(mfrow=c(1,1))
interaction.plot(df$sex, df$address, df$G1,
main="Interaksi Sex & Address terhadap G1",
xlab="Sex", ylab="Mean G1", trace.label="Address")
Garis pada plot tidak saling berpotongan secara signifikan, yang menunjukkan bahwa tidak terdapat interaksi yang kuat antara variabel sex dan address terhadap nilai G1. Hal ini sesuai dengan hasil MANOVA yang menunjukkan bahwa interaksi sex:address tidak signifikan.
plot(df$studytime, df$G1,
main="Hubungan Studytime dan G1",
xlab="Studytime", ylab="G1")
plot(df$studytime, df$G2,
main="Hubungan Studytime dan G2",
xlab="Studytime", ylab="G2")
Terdapat kecenderungan hubungan positif antara studytime dan nilai (G1 dan G2), yang menunjukkan bahwa semakin lama waktu belajar, maka nilai siswa cenderung meningkat. Hal ini mendukung hasil MANCOVA bahwa studytime signifikan.