Pemeriksaan dan Pengujian Asumsi ANOVA dengan R

Compare Means
Analysis of Experiments Data
Author

Gerry Alfa Dito

Published

November 19, 2021

Package

Install package berikut jika belum ada

install.packages("tidyverse")
install.packages("broom")
install.packages("performance")
install.packages("see")
install.packages("car")
install.packages("fbasics")
install.packages("ggpubr")
library(tidyverse)
library(performance)
library(see)
library(car)
library(broom)
library(fBasics)
library(ggpubr)

Data

Sebuah percobaan dilakukan untuk menyelidiki efektivitas lima bahan isolasi (insulating materials). Bahan Isolasi merupakan bahan yang tidak dapat mengalirkan arus listrik atau panas. Empat sampel dari setiap bahan yang diuji padategangan tinggi untuk mempercepat waktu kegagalan (failure time).Waktu kegagalan menunjukkan waktu saat bahan isolasi tidak bisa lagi menghambat arus listrik atau panas. Waktu kegagalan (dalam menit) ditunjukkan di bawah ini:

Import Data ke dalam R

Untuk import data ke R kita bisa langsung menuliskan data nya di R dengan sintaks seperti dibawah ini

bahan_isolasi <- read.table(header = TRUE,
                            text="Bahan WaktuKegagalan
                                  A 110
                                  A 157
                                  A 194
                                  A 178
                                  B 1
                                  B 2
                                  B 4
                                  B 18
                                  C 880
                                  C 1256
                                  C 5276
                                  C 4355
                                  D 495
                                  D 7040
                                  D 5307
                                  D 10050
                                  E 7
                                  E 5
                                  E 29
                                  E 2
                                  ")
bahan_isolasi
   Bahan WaktuKegagalan
1      A            110
2      A            157
3      A            194
4      A            178
5      B              1
6      B              2
7      B              4
8      B             18
9      C            880
10     C           1256
11     C           5276
12     C           4355
13     D            495
14     D           7040
15     D           5307
16     D          10050
17     E              7
18     E              5
19     E             29
20     E              2

Analysis of Variance (ANOVA)

Hipotesis yang diuji pada kasus ini adalah

\[ \begin{aligned} H_{0} &: \text{rerata waktu kegagalan sama untuk semua jenis bahan} \\ H_{1} &: \text{terdapat minimal sepasang jenis bahan yang memiliki rerata waktu kegagalan tidak sama} \end{aligned} \]

anova1 <- aov(WaktuKegagalan ~ Bahan,data = bahan_isolasi)
tidy(anova1)
# A tibble: 2 × 6
  term         df      sumsq    meansq statistic  p.value
  <chr>     <dbl>      <dbl>     <dbl>     <dbl>    <dbl>
1 Bahan         4 103191489. 25797872.      6.19  0.00379
2 Residuals    15  62505657   4167044.     NA    NA      

karena p-value yang dihasilkan dari uji ANOVA kurang dari 0.05 maka cukup bukti untuk mengakatakan bahwa \(H_{0}\) ditolak atau dengan kata lain terdapat minimal sepasang jenis bahan yang memiliki rata-rata waktu kegagalan tidak sama

Pemeriksaan Asumsi ANOVA

Pemeriksaan asumsi ANOVA dilakukan pada residual nya. Untuk mengeluarkan residualnya bisa menggunakan sintaks dibawah ini

aug1 <- augment(anova1)
aug1
# A tibble: 20 × 8
   WaktuKegagalan Bahan .fitted   .resid  .hat .sigma     .cooksd .std.resid
            <int> <chr>   <dbl>    <dbl> <dbl>  <dbl>       <dbl>      <dbl>
 1            110 A      160.     -49.7   0.25  2113. 0.0000528     -0.0281 
 2            157 A      160.      -2.75  0.25  2113. 0.000000161   -0.00156
 3            194 A      160.      34.3   0.25  2113. 0.0000250      0.0194 
 4            178 A      160.      18.3   0.25  2113. 0.00000710     0.0103 
 5              1 B        6.25    -5.25  0.25  2113. 0.000000588   -0.00297
 6              2 B        6.25    -4.25  0.25  2113. 0.000000385   -0.00240
 7              4 B        6.25    -2.25  0.25  2113. 0.000000108   -0.00127
 8             18 B        6.25    11.7   0.25  2113. 0.00000295     0.00665
 9            880 C     2942.   -2062.    0.25  2015. 0.0907        -1.17   
10           1256 C     2942.   -1686.    0.25  2048. 0.0606        -0.954  
11           5276 C     2942.    2334.    0.25  1986. 0.116          1.32   
12           4355 C     2942.    1413.    0.25  2067. 0.0426         0.799  
13            495 D     5723    -5228     0.25  1364. 0.583         -2.96   
14           7040 D     5723     1317.    0.25  2074. 0.0370         0.745  
15           5307 D     5723     -416.    0.25  2109. 0.00369       -0.235  
16          10050 D     5723     4327     0.25  1638. 0.399          2.45   
17              7 E       10.8     -3.75  0.25  2113. 0.000000300   -0.00212
18              5 E       10.8     -5.75  0.25  2113. 0.000000705   -0.00325
19             29 E       10.8     18.2   0.25  2113. 0.00000710     0.0103 
20              2 E       10.8     -8.75  0.25  2113. 0.00000163    -0.00495

Normalitas (Residual Menyebar Normal)

Pemeriksaan Normalitas bisa dilakukan dengan menggunakan grafik atau uji hipotesis.

Grafik

untuk menampilkan grafik dibawah ini terlebih dahulu harus memanggil package performance dan see

plot(check_normality(x = anova1),type="qq")

Dari grafik ini, terdapat beberapa titik residual yang tidak mengikuti pola garis maka diduga bahwa asumsi normalitas tidak dipenuhi.

Uji Hipotesis

Hipotesis yang diuji untuk pemeriksaan normalitas adalah

\[ \begin{aligned} H_{0} &: \text{galat menyebar normal} \\ H_{1} &: \text{galat tidak menyebar normal} \end{aligned} \]

Uji Normalitas bisa dilakukan dengan beberapa metode pengujian. Untuk itu, akan dibuat fungsi R agar dapat menjalankan metode-metode pengujian tersebut. Fungsi R ini tidak perlu dipahami secara serius karena dapat digunakan untuk berbagai kondisi data. Fungsi R buatan ini sangat bergantung pada package fbasics

## fungsi R buatan

normal_test <- function(data,variable){
  ad_stat <- adTest(
    data %>% 
      pull(variable)
    )@test$statistic
  ks_stat <- ksnormTest(
    data %>% 
      pull(variable)
    )@test$statistic
  jb_stat <- jarqueberaTest(
    data %>% 
      pull(variable)
    )@test$statistic
  
  shapiro_stat <- shapiroTest(
    data %>% 
      pull(variable)
    )@test$statistic
  
  ad_p.value <- adTest(
    data %>% 
      pull(variable)
    )@test$p.value
  ks_p.value <- ksnormTest(
    data %>% 
      pull(variable)
    )@test$p.value
  jb_p.value <- jarqueberaTest(
    data %>% 
      pull(variable)
    )@test$p.value
  
  shapiro_p.value <- shapiroTest(
    data %>% 
      pull(variable)
    )@test$p.value
  
  all_stats <- data.frame(statistic=c(ad_stat,                                  ks_stat[1],
                        jb_stat,
                        shapiro_stat),
                        p.value=c(
                        ad_p.value,                              ks_p.value[1],
                        jb_p.value,
                        shapiro_p.value
                        )) %>% 
    mutate(across(where(is.numeric),~ round(.x,3))) %>% 
    mutate(name=c("Anderson-Darling",
                    "Kolmogorov-Smirnov",
                    "Shapiro-Wilk",
                    "Jarque-Bera")) %>% 
    relocate(name) 
    
  
  rownames(all_stats) <- NULL
  return(all_stats)
}
normal_test(data = aug1,
            variable = ".resid")
                name statistic p.value
1   Anderson-Darling     1.959   0.000
2 Kolmogorov-Smirnov     0.588   0.000
3       Shapiro-Wilk     8.113   0.017
4        Jarque-Bera     0.809   0.001

karena p-value yang dihasilkan dari uji normalitas kurang dari 0.05 maka \(H_{0}\) ditolak atau dengan kata lain residual tidak menyebar normal

Homogenitas

Pemeriksaan Homogenitas bisa dilakukan dengan menggunakan grafik atau uji hipotesis.

Grafik

untuk menampilkan grafik dibawah ini menggunakan package ggpubr

ggscatter(data = aug1,
                  x=".fitted",
                  y=".resid")+
  geom_hline(aes(yintercept=0)) +
  theme_lucid()

Dari grafik ini, terdapat pola berbentuk corong (funnel shape) maka diduga bahwa asumsi homogenitas tidak dipenuhi.

Uji Hipotesis

Hipotesis yang diuji untuk pemeriksaan homogenitas adalah

\[ \begin{aligned} H_{0} &: \text{ragam homogen antar perlakukan} \\ H_{1} &: \text{ragam tidak homogen antar perlakuan} \end{aligned} \]

Uji Homogenitas bisa dilakukan dengan beberapa metode pengujian dibawah ini

# Bartlett (asumsi residual menyebar normal)
check_homogeneity(anova1,method="bartlett")
Warning: Variances differ between groups (Bartlett Test, p = 0.000).
# Fligner (merupakan uji nonparametrik)
check_homogeneity(anova1,method="fligner")
Warning: Variances differ between groups (Fligner-Killeen Test, p = 0.006).

karena p-value yang dihasilkan dari uji homogenitas kurang dari 0.05 maka \(H_{0}\) ditolak atau dengan kata lain ragam tidak homogen antar perlakukan

Independent

Grafik

Pemeriksaan Independent bisa dilakukan dengan menggunakan grafik.

untuk menampilkan grafik dibawah ini menggunakan package ggpubr

aug1 %>%                    
  mutate(order=seq(nrow(aug1))) %>% 
  ggscatter(x="order",y=".resid")+
  theme_lucid()

Dari grafik ini, tidak terbentuk pola tertentu (misal pola linear) maka diduga bahwa asumsi Independent dipenuhi.

Penanganan Pelanggaran Asumsi

Transformasi Box-cox

Transformasi Box-Cox didefinisikan sebagai

\[ \begin{equation} y^{(\lambda)} = \begin{cases} \frac{y^{\lambda}-1}{\lambda} & \text{untuk} \space \lambda\neq 0 \\ \ln{(y)} & \text{untuk} \space \lambda= 0 \\ \end{cases} \end{equation} \]

untuk mendapatkan nilai \(\lambda\) optimal dapat digunakan pendugaan MLE, yaitu dengan mendapatkan nilai \(\lambda\) yang memaksimumkan fungsi log-likelihood. Hal ini bisa dilihat pada grafik yang diperoleh dari fungsi boxCox pada package car

boxCox(anova1)

Berdasarkan gambar diketahui bahwa nilai lambda yang optimum ada disekitar nol. Oleh karena itu kita bisa langsung memakai \(\lambda = 0\).

Cara lain untuk mendapatkan nilai lambda optimum adalah dengan menggunakan fungsi powerTransform dari package car yang menampilkan hasil pendugaan titik (point estimate), selang kepercayaan dan uji hipotesis dengan Likelihood Ratio Test (LRT) dari \(\lambda\)

boxcox_res <-powerTransform(anova1) 
summary(boxcox_res)
bcPower Transformation to Normality 
   Est Power Rounded Pwr Wald Lwr Bnd Wald Upr Bnd
Y1    0.0101           0       -0.094       0.1141

Likelihood ratio test that transformation parameter is equal to 0
 (log transformation)
                             LRT df    pval
LR test, lambda = (0) 0.03612792  1 0.84925

Likelihood ratio test that no transformation is needed
                           LRT df       pval
LR test, lambda = (1) 110.0337  1 < 2.22e-16
# pembulatan pada lambda
boxcox_res$roundlam
Y1 
 0 

Berdasarkan output nya didapatkan bahwa

  1. penduga titik nya \(\lambda=0.0101\) atau dibulatkan menjadi \(\lambda=0\).
  2. selang kepercayaan \(-0.094 \leq \lambda \leq 0.1141\)
  3. Untuk uji hipotesis yang pertama (Log Transformation)

\[ \begin{aligned} H_{0} &: \lambda = 0 \space \\ H_{1} &: \lambda \neq 0 \end{aligned} \]

karena p-value dari uji yang pertama besar (lebih dari 0.05) maka tidak tolak \(H_{0}\) atau dengan kata lain kita bisa menggunakan \(\lambda=0\) 4. Untuk uji hipotesis yang kedua (no transformation)

\[ \begin{aligned} H_{0} &: \lambda = 1 \space \\ H_{1} &: \lambda \neq 1 \end{aligned} \]

karena p-value dari uji yang pertama kecil (kurang dari 0.05) maka tolak \(H_{0}\) atau dengan kata lain kita bisa menggunakan \(\lambda \neq 1\). Nilai \(\lambda \neq 1\) implikasinya ada transformasi dan nilai \(\lambda = 1\) implikasinya tidak dibutuhkan transformasi.

bahan_isolasi_trans <- bahan_isolasi %>% 
                        mutate(WaktuKegagalan_Trans =bcPower(WaktuKegagalan,boxcox_res$roundlam))

anova2 <- aov(WaktuKegagalan_Trans ~ Bahan,data = bahan_isolasi_trans)
tidy(anova2)
# A tibble: 2 × 6
  term         df sumsq meansq statistic      p.value
  <chr>     <dbl> <dbl>  <dbl>     <dbl>        <dbl>
1 Bahan         4 165.   41.3       37.7  0.000000118
2 Residuals    15  16.4   1.10      NA   NA          

Pemeriksaan kembali Asumsi ANOVA

Pemeriksaan asumsi ANOVA dilakukan pada residual nya. Untuk mengeluarkan residualnya bisa menggunakan sintaks dibawah ini

aug2 <- augment(anova2)
aug2
# A tibble: 20 × 8
   WaktuKegagalan_Trans Bahan .fitted   .resid  .hat .sigma   .cooksd .std.resid
                  <dbl> <chr>   <dbl>    <dbl> <dbl>  <dbl>     <dbl>      <dbl>
 1                4.70  A        5.05 -0.351    0.25  1.08    1.00e-2   -0.387  
 2                5.06  A        5.05  0.00465  0.25  1.08    1.76e-6    0.00513
 3                5.27  A        5.05  0.216    0.25  1.08    3.79e-3    0.239  
 4                5.18  A        5.05  0.130    0.25  1.08    1.37e-3    0.144  
 5                0     B        1.24 -1.24     0.25  1.01    1.25e-1   -1.37   
 6                0.693 B        1.24 -0.549    0.25  1.07    2.45e-2   -0.606  
 7                1.39  B        1.24  0.144    0.25  1.08    1.68e-3    0.159  
 8                2.89  B        1.24  1.65     0.25  0.957   2.20e-1    1.82   
 9                6.78  C        7.72 -0.936    0.25  1.04    7.11e-2   -1.03   
10                7.14  C        7.72 -0.581    0.25  1.07    2.74e-2   -0.641  
11                8.57  C        7.72  0.855    0.25  1.05    5.92e-2    0.943  
12                8.38  C        7.72  0.663    0.25  1.06    3.56e-2    0.731  
13                6.20  D        8.21 -2.01     0.25  0.889   3.28e-1   -2.22   
14                8.86  D        8.21  0.645    0.25  1.07    3.38e-2    0.712  
15                8.58  D        8.21  0.363    0.25  1.08    1.07e-2    0.400  
16                9.22  D        8.21  1.00     0.25  1.04    8.13e-2    1.10   
17                1.95  E        1.90  0.0420   0.25  1.08    1.43e-4    0.0463 
18                1.61  E        1.90 -0.295    0.25  1.08    7.04e-3   -0.325  
19                3.37  E        1.90  1.46     0.25  0.985   1.74e-1    1.61   
20                0.693 E        1.90 -1.21     0.25  1.02    1.19e-1   -1.34   

Normalitas (Galat Menyebar Normal)

Pemeriksaan Normalitas bisa dilakukan dengan menggunakan grafik atau uji hipotesis.

Grafik

untuk menampilkan grafik dibawah ini terlebih dahulu harus memanggil package performance dan see

plot(check_normality(x = anova2),type="qq")

Dari grafik ini, titik-titik residual yang engikuti pola garis dan berada di dalam daerah selang kepercayaan maka diduga bahwa asumsi normalitas terpenuhi.

Uji Hipotesis

Hipotesis yang diuji untuk pemeriksaan normalitas adalah

\[ \begin{aligned} H_{0} &: \text{galat menyebar normal} \\ H_{1} &: \text{galat tidak menyebar normal} \end{aligned} \]

Uji Normalitas bisa dilakukan dengan beberapa metode pengujian.

normal_test(data = aug2,
            variable = ".resid")
                name statistic p.value
1   Anderson-Darling     0.137   0.971
2 Kolmogorov-Smirnov     0.102   0.972
3       Shapiro-Wilk     0.259   0.878
4        Jarque-Bera     0.986   0.987

karena p-value yang dihasilkan dari uji normalitas lebih besar dari 0.05 maka \(H_{0}\) tidak ditolak atau dengan kata lain galat menyebar normal

Homogenitas

Pemeriksaan Homogenitas bisa dilakukan dengan menggunakan grafik atau uji hipotesis.

Grafik

untuk menampilkan grafik dibawah ini menggunakan package ggpubr

ggscatter(data = aug2,
                  x=".fitted",
                  y=".resid")+
  geom_hline(aes(yintercept=0)) +
  theme_lucid()

Dari grafik ini, tidak terdapat pola berbentuk corong (funnel shape) maka diduga bahwa asumsi homogenitas terpenuhi.

Uji Hipotesis

Hipotesis yang diuji untuk pemeriksaan homogenitas adalah

\[ \begin{aligned} H_{0} &: \text{ragam homogen antar perlakukan} \\ H_{1} &: \text{ragam tidak homogen antar perlakuan} \end{aligned} \]

Uji Homogenitas bisa dilakukan dengan beberapa metode pengujian dibawah ini

# Bartlett (asumsi residual menyebar normal)
check_homogeneity(anova2,method="bartlett")
OK: There is not clear evidence for different variances across groups (Bartlett Test, p = 0.211).
# Fligner (merupakan uji nonparametrik)
check_homogeneity(anova2,method="fligner")
OK: There is not clear evidence for different variances across groups (Fligner-Killeen Test, p = 0.351).

karena p-value yang dihasilkan dari uji homogenitas lebih besar dari 0.05 maka \(H_{0}\) tidak ditolak atau dengan kata lain ragam homogen antar perlakukan

Independent

Grafik

Pemeriksaan Independent bisa dilakukan dengan menggunakan grafik.

untuk menampilkan grafik dibawah ini menggunakan package ggpubr

aug2 %>%                    
  mutate(order=seq(nrow(aug1))) %>% 
  ggscatter(x="order",y=".resid")+
  theme_lucid()

Dari grafik ini, tidak terbentuk pola tertentu (misal pola linear) maka diduga bahwa asumsi Independent dipenuhi.