Load Library dan Data

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.5.3
## Warning: package 'ggplot2' was built under R version 4.5.3
## Warning: package 'forcats' was built under R version 4.5.3
## Warning: package 'lubridate' was built under R version 4.5.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(MVN)
## Warning: package 'MVN' was built under R version 4.5.3
## Registered S3 method overwritten by 'lme4':
##   method           from
##   na.action.merMod car
library(biotools)
## Warning: package 'biotools' was built under R version 4.5.3
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## 
## The following object is masked from 'package:dplyr':
## 
##     select
## 
## ---
## biotools version 4.3
library(car)
## Warning: package 'car' was built under R version 4.5.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.5.3
## 
## Attaching package: 'car'
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some
library(rstatix)
## Warning: package 'rstatix' was built under R version 4.5.3
## 
## Attaching package: 'rstatix'
## 
## The following object is masked from 'package:MASS':
## 
##     select
## 
## The following object is masked from 'package:stats':
## 
##     filter
data <- read.csv("student-mat.csv", sep = ";")

Pemilihan Variabel

data <- data %>%
  select(G1, G3, schoolsup, higher, studytime)

data$schoolsup <- as.factor(data$schoolsup)
data$higher    <- as.factor(data$higher)

Deskripsi Data

summary(data)
##        G1              G3        schoolsup higher      studytime    
##  Min.   : 3.00   Min.   : 0.00   no :344   no : 20   Min.   :1.000  
##  1st Qu.: 8.00   1st Qu.: 8.00   yes: 51   yes:375   1st Qu.:1.000  
##  Median :11.00   Median :11.00                       Median :2.000  
##  Mean   :10.91   Mean   :10.42                       Mean   :2.035  
##  3rd Qu.:13.00   3rd Qu.:14.00                       3rd Qu.:2.000  
##  Max.   :19.00   Max.   :20.00                       Max.   :4.000
pairs(data[, c("G1","G3","studytime")])

Preprocessing Data

sum(is.na(data))
## [1] 0
data$studytime <- scale(data$studytime)

Uji Asumsi

Normalitas Multivariat (Mardia)
MVN::mvn(data[, c("G1","G3")], mvn_test = "mardia")
## $multivariate_normality
##              Test Statistic p.value     Method          MVN
## 1 Mardia Skewness   208.530  <0.001 asymptotic ✗ Not normal
## 2 Mardia Kurtosis     4.917  <0.001 asymptotic ✗ Not normal
## 
## $univariate_normality
##               Test Variable Statistic p.value    Normality
## 1 Anderson-Darling       G1     3.227  <0.001 ✗ Not normal
## 2 Anderson-Darling       G3     8.303  <0.001 ✗ Not normal
## 
## $descriptives
##   Variable   n   Mean Std.Dev Median Min Max 25th 75th  Skew Kurtosis
## 1       G1 395 10.909   3.319     11   3  19    8   13  0.24    2.300
## 2       G3 395 10.415   4.581     11   0  20    8   14 -0.73    3.383
## 
## $data
##     G1 G3
## 1    5  6
## 2    5  6
## 3    7 10
## 4   15 15
## 5    6 10
## 6   15 15
## 7   12 11
## 8    6  6
## 9   16 19
## 10  14 15
## 11  10  9
## 12  10 12
## 13  14 14
## 14  10 11
## 15  14 16
## 16  14 14
## 17  13 14
## 18   8 10
## 19   6  5
## 20   8 10
## 21  13 15
## 22  12 15
## 23  15 16
## 24  13 12
## 25  10  8
## 26   6  8
## 27  12 11
## 28  15 15
## 29  11 11
## 30  10 11
## 31   9 12
## 32  17 17
## 33  17 16
## 34   8 12
## 35  12 15
## 36   8  6
## 37  15 18
## 38  15 15
## 39  12 11
## 40  14 13
## 41   7 11
## 42  12 12
## 43  19 18
## 44   8 11
## 45  10  9
## 46   8  6
## 47  11 11
## 48  19 20
## 49  15 14
## 50   7  7
## 51  12 13
## 52  11 13
## 53  11 10
## 54   8 11
## 55  10 13
## 56   8 10
## 57  14 15
## 58  14 15
## 59   9  9
## 60  15 16
## 61  10 11
## 62  10 11
## 63   8  9
## 64  10  9
## 65  10 10
## 66  16 15
## 67  13 12
## 68   7  6
## 69   8  8
## 70  16 16
## 71  13 15
## 72  10 10
## 73   8  5
## 74  12 14
## 75  11 11
## 76   9 10
## 77  11 10
## 78  11 11
## 79   8 10
## 80   5  5
## 81  10 12
## 82  11 11
## 83   7  6
## 84  15 15
## 85   9 10
## 86   7  8
## 87   8  6
## 88  13 14
## 89  11 10
## 90   8  7
## 91   7  8
## 92  16 18
## 93   7  6
## 94  11 10
## 95  11 14
## 96   7 10
## 97  11 15
## 98   8 10
## 99  11 14
## 100  7  8
## 101  7  5
## 102 16 17
## 103 10 14
## 104  7  6
## 105 16 18
## 106 10 11
## 107  7  8
## 108 16 18
## 109 10 13
## 110 14 16
## 111 18 19
## 112  7 10
## 113 10 13
## 114 18 19
## 115  9  9
## 116 15 16
## 117 11 14
## 118 13 13
## 119  9  8
## 120 14 13
## 121 16 15
## 122 16 15
## 123 13 13
## 124 14 13
## 125  8  8
## 126 13 12
## 127  7 11
## 128  7  9
## 129  7  0
## 130 18 18
## 131 12  0
## 132  8  0
## 133 10 12
## 134 12 11
## 135  9  0
## 136 11  0
## 137 10  0
## 138  4  0
## 139 14 12
## 140 16 15
## 141  7  0
## 142  9  9
## 143  9 11
## 144 14 13
## 145  5  0
## 146  8 11
## 147  6  0
## 148 10 11
## 149  7  0
## 150  8 10
## 151  6  0
## 152 12 14
## 153 10 10
## 154  5  0
## 155 11 12
## 156 11  8
## 157 16 13
## 158  9 10
## 159 17 15
## 160 10 12
## 161  7  0
## 162  5  7
## 163  7  0
## 164 10 10
## 165  5  7
## 166 12 12
## 167 10 10
## 168 14 16
## 169  6  0
## 170 14 14
## 171  6  0
## 172 13 16
## 173 13 10
## 174  8  0
## 175 10  9
## 176 10  9
## 177 13 11
## 178  6  6
## 179 10  9
## 180 10 11
## 181  9  8
## 182 12 12
## 183 16 17
## 184  9  8
## 185 12 12
## 186 12 11
## 187 11 11
## 188 15 15
## 189  8  9
## 190  8 10
## 191 11 13
## 192  8  9
## 193  7  8
## 194  8 10
## 195 13 14
## 196 14 15
## 197 17 16
## 198  9 10
## 199 18 18
## 200  9 10
## 201 16 16
## 202  8 10
## 203  9 10
## 204  7  6
## 205 10 11
## 206 10  9
## 207  7  7
## 208 11 13
## 209  9 10
## 210  7  7
## 211  8  8
## 212 12 13
## 213 12 14
## 214  6  8
## 215  8 10
## 216 14 15
## 217  6  4
## 218  6  8
## 219  7  8
## 220  9 10
## 221  6  6
## 222  6  0
## 223 16 17
## 224 12 13
## 225 13 14
## 226  9  7
## 227 16 15
## 228 12 12
## 229 10  9
## 230 12 12
## 231 13 14
## 232 11 11
## 233 11  9
## 234 14 13
## 235  9  6
## 236 11 10
## 237 14 13
## 238 13 12
## 239 13 11
## 240  7  0
## 241 12 12
## 242 10 12
## 243  6  0
## 244 13 12
## 245  7  0
## 246 18 18
## 247 12 13
## 248  6  8
## 249  3  5
## 250 13 15
## 251  6  8
## 252  7 10
## 253  6  8
## 254  8  8
## 255  8 12
## 256  7  8
## 257 14 13
## 258 11 11
## 259 15 14
## 260 10  0
## 261 17 18
## 262  8  8
## 263 13 12
## 264 10  9
## 265  9  0
## 266 17 17
## 267  9 10
## 268 12 11
## 269 10 10
## 270  6  0
## 271  9  9
## 272 15 14
## 273 11 11
## 274 15 14
## 275 10 10
## 276 12 12
## 277 10  9
## 278  9  9
## 279  9  8
## 280 10 10
## 281  8  8
## 282 11 10
## 283 12 12
## 284  8 10
## 285 10 11
## 286 12 11
## 287 18 19
## 288 13 12
## 289 15 14
## 290 15 15
## 291 12 11
## 292 15 15
## 293 12 13
## 294 18 18
## 295 14 14
## 296 14 11
## 297 10  0
## 298 10  8
## 299 14 14
## 300 16 16
## 301 12 11
## 302 11 10
## 303 15 14
## 304 17 18
## 305 15 13
## 306 14 12
## 307 17 18
## 308  8  8
## 309 15 12
## 310 12 10
## 311  9  0
## 312 14 13
## 313 13 11
## 314 13 11
## 315 15 13
## 316 13 11
## 317  8  0
## 318  9  9
## 319 11 10
## 320 11 11
## 321 13 13
## 322 11  9
## 323 11 11
## 324 12 15
## 325 16 15
## 326  9 11
## 327 14 16
## 328 11 10
## 329 10  9
## 330 14 14
## 331  9  8
## 332 12 14
## 333  7  0
## 334  8  0
## 335 10  0
## 336 16 15
## 337 14 13
## 338  7  0
## 339 16 17
## 340  9 10
## 341 11 11
## 342 10  0
## 343 16 15
## 344  9  0
## 345 11 10
## 346 13 14
## 347 16 16
## 348 10  9
## 349 13 15
## 350 11 13
## 351  8  8
## 352 13 13
## 353  8  8
## 354  8  8
## 355 13 11
## 356 10  9
## 357 12 13
## 358 12 11
## 359 10 10
## 360 18 16
## 361 13 13
## 362 13 12
## 363 11 10
## 364 16 15
## 365 12 12
## 366 10 10
## 367 13 13
## 368  7  0
## 369 11 10
## 370 14 11
## 371  7  9
## 372 14 12
## 373 13 11
## 374  6  5
## 375 19 19
## 376  8 10
## 377 15 15
## 378  8 10
## 379 15 15
## 380 10 10
## 381 15 14
## 382  7  7
## 383 11 10
## 384  6  0
## 385  6  5
## 386 10 10
## 387  6  6
## 388  7  0
## 389  7  8
## 390  6  0
## 391  9  9
## 392 14 16
## 393 10  7
## 394 11 10
## 395  8  9
## 
## $subset
## NULL
## 
## $outlierMethod
## [1] "none"
## 
## attr(,"class")
## [1] "mvn"
Homogenitas Kovarians (Box’s M)
boxM(data[, c("G1","G3")], data$schoolsup)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  data[, c("G1", "G3")]
## Chi-Sq (approx.) = 19.418, df = 3, p-value = 0.0002241
boxM(data[, c("G1","G3")], data$higher)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  data[, c("G1", "G3")]
## Chi-Sq (approx.) = 2.7773, df = 3, p-value = 0.4272
Dependensi Antar Variabel Dependen (Korelasi)
cor.test(data$G1, data$G3)
## 
##  Pearson's product-moment correlation
## 
## data:  data$G1 and data$G3
## t = 26.568, df = 393, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.7631479 0.8341713
## sample estimates:
##       cor 
## 0.8014679
Homogeneity of Regression Slope
model_slope <- lm(G3 ~ studytime * schoolsup * higher, data = data)
anova(model_slope)
## Analysis of Variance Table
## 
## Response: G3
##                      Df Sum Sq Mean Sq F value    Pr(>F)    
## studytime             1   79.1  79.132  3.9579 0.0473533 *  
## schoolsup             1   61.9  61.940  3.0980 0.0791749 .  
## higher                1  245.6 245.647 12.2864 0.0005096 ***
## studytime:schoolsup   1  114.2 114.232  5.7135 0.0173112 *  
## studytime:higher      1    1.8   1.776  0.0888 0.7658045    
## schoolsup:higher      1    9.7   9.725  0.4864 0.4859585    
## Residuals           388 7757.5  19.993                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

MANOVA

manova_model <- manova(cbind(G1, G3) ~ schoolsup * higher, data = data)
summary(manova_model, test = "Pillai")
##                   Df   Pillai approx F num Df den Df    Pr(>F)    
## schoolsup          1 0.067721  14.1649      2    390 1.152e-06 ***
## higher             1 0.040702   8.2736      2    390 0.0003027 ***
## schoolsup:higher   1 0.003051   0.5967      2    390 0.5511180    
## Residuals        391                                              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

MANCOVA

mancova_model <- manova(cbind(G1, G3) ~ schoolsup * higher + studytime, data = data)
summary(mancova_model, test = "Pillai")
##                   Df   Pillai approx F num Df den Df    Pr(>F)    
## schoolsup          1 0.069366  14.4973      2    389 8.462e-07 ***
## higher             1 0.041284   8.3755      2    389 0.0002746 ***
## studytime          1 0.025928   5.1773      2    389 0.0060387 ** 
## schoolsup:higher   1 0.003120   0.6087      2    389 0.5445488    
## Residuals        390                                              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ANOVA

summary.aov(manova_model)
##  Response G1 :
##                   Df Sum Sq Mean Sq F value    Pr(>F)    
## schoolsup          1  196.2 196.207 19.2547 1.473e-05 ***
## higher             1  156.9 156.915 15.3988 0.0001028 ***
## schoolsup:higher   1    3.3   3.272  0.3211 0.5712535    
## Residuals        391 3984.3  10.190                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##  Response G3 :
##                   Df Sum Sq Mean Sq F value    Pr(>F)    
## schoolsup          1   56.7  56.681  2.8045 0.0947992 .  
## higher             1  290.0 289.975 14.3476 0.0001759 ***
## schoolsup:higher   1   20.9  20.879  1.0331 0.3100655    
## Residuals        391 7902.4  20.211                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ANCOVA

ancova_model <- aov(G3 ~ schoolsup * higher + studytime, data = data)
summary(ancova_model)
##                   Df Sum Sq Mean Sq F value   Pr(>F)    
## schoolsup          1     57   56.68   2.812 0.094350 .  
## higher             1    290  289.98  14.387 0.000172 ***
## studytime          1     40   40.06   1.988 0.159377    
## schoolsup:higher   1     23   22.64   1.123 0.289830    
## Residuals        390   7861   20.16                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Post-Hoc Tukey

TukeyHSD(aov(G3 ~ schoolsup, data = data))
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = G3 ~ schoolsup, data = data)
## 
## $schoolsup
##             diff       lwr       upr    p adj
## yes-no -1.129674 -2.478272 0.2189241 0.100385
TukeyHSD(aov(G3 ~ higher, data = data))
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = G3 ~ higher, data = data)
## 
## $higher
##         diff      lwr      upr     p adj
## yes-no 3.808 1.773035 5.842965 0.0002668