## ------------------------------------------------------------ ## ANAVA DUA JALUR R – PENELITIAN PENDIDIKAN MATEMATIKA ## Desain: ## Y : Skor tes matematika ## A : Model pembelajaran (Konvensional vs RME) ## B : Motivasi belajar (Rendah, Sedang, Tinggi) ## ------------------------------------------------------------ # 1. SIMULASI DATA -------------------------------------------- set.seed(123) # agar hasil bisa direplikasi # Faktor A: Model pembelajaran (2 level) model <- factor(rep(c("Konvensional", "RME"), each = 3 * 20)) # 2 model × 3 motivasi × 20 siswa = 120 observasi # Faktor B: Motivasi belajar (3 level) motivasi <- factor(rep(rep(c("Rendah", "Sedang", "Tinggi"), each = 20), times = 2)) # Rata-rata teoritis skor matematika untuk tiap kombinasi # Konvensional: rendah 60, sedang 70, tinggi 75 # RME : rendah 65, sedang 78, tinggi 85 mean_mat <- with( data.frame(model, motivasi), ifelse(model == "Konvensional" & motivasi == "Rendah", 60, ifelse(model == "Konvensional" & motivasi == "Sedang", 70, ifelse(model == "Konvensional" & motivasi == "Tinggi", 75, ifelse(model == "RME" & motivasi == "Rendah", 65, ifelse(model == "RME" & motivasi == "Sedang", 78, 85))))) ) # Simulasikan skor tes (normal, sd = 8) skor <- rnorm(n = length(mean_mat), mean = mean_mat, sd = 8) # Susun data frame data_math <- data.frame( model, motivasi, skor ) # Cek sekilas data print(head(data_math)) # 2. ANAVA DUA JALUR ------------------------------------------ # Model ANAVA dua jalur dengan interaksi anova2 <- aov(skor ~ model * motivasi, data = data_math) # Ringkasan hasil ANAVA cat("\n=== HASIL ANAVA DUA JALUR ===\n") print(summary(anova2)) # 3. UJI ASUMSI ------------------------------------------------ # Residual dan fitted values res <- residuals(anova2) fitted_vals <- fitted(anova2) # 3.1 Plot residual vs fitted (cek pola residual) par(mfrow = c(1, 2)) # 2 plot dalam 1 frame plot(fitted_vals, res, main = "Residual vs Fitted", xlab = "Nilai taksiran (fitted)", ylab = "Residual") abline(h = 0, col = "red", lwd = 2) # 3.2 Q-Q plot residual (cek normalitas visual) qqnorm(res, main = "Normal Q-Q Plot Residual") qqline(res, col = "red", lwd = 2) par(mfrow = c(1, 1)) # reset layout # 3.3 Uji normalitas residual (Shapiro-Wilk) cat("\n=== UJI NORMALITAS RESIDUAL (SHAPIRO-WILK) ===\n") print(shapiro.test(res)) # 3.4 Uji homogenitas varians (Levene test) – butuh paket car if (!require(car)) install.packages("car") library(car) cat("\n=== UJI HOMOGENITAS VARIANS (LEVENETEST) ===\n") print(leveneTest(skor ~ model * motivasi, data = data_math)) # 4. ANALISIS LANJUTAN ---------------------------------------- # 4.1 Rata-rata per sel (kombinasi A×B) cat("\n=== RATA-RATA SKOR PER KOMBINASI MODEL × MOTIVASI ===\n") print(with(data_math, tapply(skor, list(model, motivasi), mean))) # 4.2 Plot interaksi (untuk interpretasi ANAVA dua jalur) interaction.plot(x.factor = data_math$motivasi, trace.factor = data_math$model, response = data_math$skor, fun = mean, xlab = "Motivasi Belajar", ylab = "Rata-rata Skor Matematika", trace.label= "Model Pembelajaran", main = "Plot Interaksi Model × Motivasi") # 4.3 Post-hoc untuk faktor motivasi (jika efek utama signifikan) cat("\n=== UJI LANJUT (Tukey) UNTUK FAKTOR MOTIVASI ===\n") print(TukeyHSD(anova2, which = "motivasi")) ## ------------------------------------------------------------ ## PENAFSIRAN UMUM (narasi, bukan output R): ## - Jika baris 'model' di summary(anova2) signifikan (p < 0,05), ## maka ada perbedaan rata-rata skor matematika antara ## model konvensional dan RME. ## - Jika baris 'motivasi' signifikan, ada perbedaan rata-rata ## antar kategori motivasi (rendah, sedang, tinggi). ## - Jika baris 'model:motivasi' signifikan, berarti pengaruh model ## pembelajaran bergantung pada tingkat motivasi (ada interaksi). ## - Gunakan output rata-rata sel dan plot interaksi untuk menafsirkan ## pola perbedaan yang muncul. ## ------------------------------------------------------------