install.packages("tidyverse")
install.packages("broom")
install.packages("performance")
install.packages("see")
install.packages("car")
install.packages("fbasics")
install.packages("ggpubr")
Pemeriksaan dan Pengujian Asumsi ANOVA dengan R
Package
Install package berikut jika belum ada
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
<- read.table(header = TRUE,
bahan_isolasi 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} \]
<- aov(WaktuKegagalan ~ Bahan,data = bahan_isolasi) anova1
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
<- augment(anova1) aug1
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
<- function(data,variable){
normal_test <- adTest(
ad_stat %>%
data pull(variable)
@test$statistic
)<- ksnormTest(
ks_stat %>%
data pull(variable)
@test$statistic
)<- jarqueberaTest(
jb_stat %>%
data pull(variable)
@test$statistic
)
<- shapiroTest(
shapiro_stat %>%
data pull(variable)
@test$statistic
)
<- adTest(
ad_p.value %>%
data pull(variable)
@test$p.value
)<- ksnormTest(
ks_p.value %>%
data pull(variable)
@test$p.value
)<- jarqueberaTest(
jb_p.value %>%
data pull(variable)
@test$p.value
)
<- shapiroTest(
shapiro_p.value %>%
data pull(variable)
@test$p.value
)
<- data.frame(statistic=c(ad_stat, ks_stat[1],
all_stats
jb_stat,
shapiro_stat),p.value=c(
1],
ad_p.value, ks_p.value[
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\)
<-powerTransform(anova1)
boxcox_res 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
$roundlam boxcox_res
Y1
0
Berdasarkan output nya didapatkan bahwa
- penduga titik nya \(\lambda=0.0101\) atau dibulatkan menjadi \(\lambda=0\).
- selang kepercayaan \(-0.094 \leq \lambda \leq 0.1141\)
- 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 %>%
bahan_isolasi_trans mutate(WaktuKegagalan_Trans =bcPower(WaktuKegagalan,boxcox_res$roundlam))
<- aov(WaktuKegagalan_Trans ~ Bahan,data = bahan_isolasi_trans) anova2
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
<- augment(anova2) aug2
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.