Library:
> # install.packages("knitr")
> # install.packages("rmarkdown")
> # install.packages("prettydoc")
> # install.packages("equatiomatic")
> # install.packages("readxl")
> # install.packages("ggplot2")
> # install.packages("dplyr")
> # install.packages("tidyr")
> # install.packages("car")
> # install.packages("agricolae")1 PENDAHULUAN
1.1 Latar Belakang
Dengan adanya perkembangan kebutuhan analisis data pada penerapan berbagai bidang uji anova (Analysis Of Variance) menjadi salah satu analisis yang sering diimplementasikan pada kasus nyata dalam kehidupan sehari-hari. Tujuan uji anova adalah mengambil keputusan berdasarkan hipotesis statistik yang dilakukan dengan 2 variabel atau lebih. Penggunaan uji Anova dapat memperkecil resiko kesalahan dalam perhitungan maupun analisisnya apabila dibandingkan uji hipotesis dengan menggunakan uji Z dan uji T dalam pengambilan keputusannya. Uji anova memiliki keunggulan dalam analisis berbagai kasus dengan tingkat kerumitan yang kompleks. Hal ini dapat dikaitkan dengan hubungan antara analisis anova dan analisis regresi. Sehingga, seringkali diimplementasikan sesuai kebutuhan analisa data di berbagai bidang.
1.2 ANOVA
Analysis of Varian merupakan bagian dari metode analisis statistika yang tergolong analisis kompleks. ANOVA digunakan untuk menguji perbedaan antara rata-rata populasi 2 variabel atau lebih dengan cara membandingkan variansinya. ANOVA merupakan bentuk perluasan dari uji T dengan variabel yang tidak terbatas.
1.3 Asumsi ANOVA
1.Asumsi Normalitas Asumsi normalitas menyatakan bahwa data dalam masing-masing kelompok atau perlakuan harus berdistribusi secara mendekati distribusi normal. Beberapa cara untuk memeriksa asumsi normalitas dengan plot histogram, uji shapiro wil, uji kolmogorov smirnov dan lainnya
2.Asumsi Homogenitas Ragam Asumsi bahwa varians (ragam) dalam masing-masing kelompok atau perlakuan yang dibandingkan adalah sama atau homogen. Beberapa cara untuk memeriksa asumsi homogenitas dengan plot boxplot, uji levene test dan lainnya
1.4 Uji Lanjut
1.Uji lanjut BNT Tujuannya adalah untuk menguji perbedaan rata-rata (mean) antara pasangan kelompok dengan tingkat signifikansi yang dikoreksi. Penggunaan uji BNT dapat mengurangi risiko kesalahan tipe I ketika melakukan banyak perbandingan kelompok tanpa koreksi alpha yang sesuai.
2.Uji lanjut BNJ Penggunaan uji BNJ mempertimbangkan distribusi data yang tidak normal dan mengoreksi tingkat signifikansi (alpha) untuk menghindari kesalahan tipe I.
1.5 Data
Data tabel menu kategori produk starbucks disimpan dalam bentuk excel kemudian impor data dari excel pada software R dengan menggunakan package readxl dan fungsi read_excel untuk membaca data dengan pendefinisian fix sebagai path dari file excel yang digunakan.
2 SOURCE CODE
2.1 Mengimport Data
> library(readxl)
> #ANOVA One Way
> data <- read_excel("C:/Users/ACER/Downloads/nutrisi starbucks.xlsx")
> y <- data$calories
> x <- data$type
> fix <- data.frame(x,y)
> fix$x <- as.factor(fix$x)
> fix
x y
1 sandwich 400
2 sandwich 460
3 sandwich 360
4 sandwich 390
5 sandwich 350
6 sandwich 420
7 sandwich 390
8 hot_breakfast 350
9 hot_breakfast 300
10 hot_breakfast 350
11 hot_breakfast 500
12 hot_breakfast 290
13 hot_breakfast 140
14 hot_breakfast 320
15 petite 180
16 petite 170
17 petite 190
18 petite 170
19 petite 190
20 petite 180
21 petite 160
22 bistro_box 480
23 bistro_box 270
24 bistro_box 360
25 bistro_box 380
26 bistro_box 380
27 bistro_box 420
28 bistro_box 350
29 bakery 210
30 bakery 350
31 bakery 300
32 bakery 420
33 bakery 370
34 bakery 140
35 bakery 2802.2 Boxplot
> library(ggplot2)
> plot1 <- ggplot(fix) +
+ aes(x = x, y = y, fill = x) +
+ geom_boxplot() +
+ scale_fill_hue(direction = 1) +
+ theme_minimal() +
+ theme(legend.position = "none")
> plot12.3 Langkah Perhitungan
2.3.1 Cara Manual
> #Langkah 1
> library(dplyr)
> library(tidyr)
> N <- nrow(fix)
> N
[1] 35
> p <- fix$x %>% unique() %>% length()
> p
[1] 5
> DBt <- N - 1
> DBt
[1] 34
> DBp <- p - 1
> DBp
[1] 4
> DBg <- N - p
> DBg
[1] 30
>
> #Langkah 2
> type.mean <- aggregate(y ~ x, fix, mean )[,2]
> n <- aggregate(y ~ x, fix, length)[,2]
> calories.mean <- mean(fix$y)
> JKt <- sum((fix$y - calories.mean)^2)
> JKt
[1] 365988.6
> JKp <- sum(n*(type.mean - calories.mean)^2)
> JKp
[1] 208474.3
> JKg <- JKt - JKp
> JKg
[1] 157514.3
>
> #Langkah 3
> KTp <- JKp / DBp
> KTp
[1] 52118.57
> KTg <- JKg / DBg
> KTg
[1] 5250.476
>
> #Langkah 4
> Fhit <- KTp/KTg
> Fhit
[1] 9.926447
> pValue <- pf(Fhit, DBp, DBg, lower.tail = F)
> pValue
[1] 3.072771e-05
>
> #Langkah 5
> hasil <- data.frame(
+ SK = c("Perlakuan", "Galat", "Total"),
+ DB = c(DBp, DBg, DBt),
+ JK = c(JKp, JKg, JKt),
+ KT = c(KTp, KTg, NA),
+ Fhit = c(Fhit, NA, NA),
+ p.Val = c(pVal, NA, NA))
Error in eval(expr, envir, enclos): object 'pVal' not found
> hasil
Error in eval(expr, envir, enclos): object 'hasil' not foundDengan menggunakan langkah-langkah seperti diatas akan mempunyai output yang sama dengan penggunaan function anova pada R seperti dibawah ini.
2.3.2 Anova One Way Function
> #ANOVA One Way (function)
> fungsi <- as.formula("y ~ x")
> model <- aov(fungsi, fix)
> summary(model)
Df Sum Sq Mean Sq F value Pr(>F)
x 4 208474 52119 9.926 3.07e-05 ***
Residuals 30 157514 5250
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
> sisaan <- residuals(model)2.4 Asumsi Normalitas Residual
> #Normalitas
> shapiro.test(sisaan)
Shapiro-Wilk normality test
data: sisaan
W = 0.92484, p-value = 0.01972.5 Asumsi Homogenitas Ragam
> #Homogenitas
> library(car)
> leveneTest(y ~ x,data=fix)
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 4 2.1782 0.09552 .
30
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 12.6 Uji lanjut BNT
> library(agricolae)
> #BNT
> bnt <- LSD.test(model,"x",alpha=0.05)
> bnt
$statistics
MSerror Df Mean CV t.value LSD
5250.476 30 313.4286 23.11856 2.042272 79.10046
$parameters
test p.ajusted name.t ntr alpha
Fisher-LSD none x 5 0.05
$means
y std r LCL UCL Min Max Q25 Q50 Q75
bakery 295.7143 96.41182 7 239.7818 351.6468 140 420 245 300 360
bistro_box 377.1429 64.47591 7 321.2104 433.0753 270 480 355 380 400
hot_breakfast 321.4286 106.36863 7 265.4961 377.3610 140 500 295 320 350
petite 177.1429 11.12697 7 121.2104 233.0753 160 190 170 180 185
sandwich 395.7143 36.90399 7 339.7818 451.6468 350 460 375 390 410
$comparison
NULL
$groups
y groups
sandwich 395.7143 a
bistro_box 377.1429 a
hot_breakfast 321.4286 ab
bakery 295.7143 b
petite 177.1429 c
attr(,"class")
[1] "group"2.7 Uji lanjut BNT
> #BNJ
> bnj <- TukeyHSD(model,conf.level=0.95)
> bnj
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = fungsi, data = fix)
$x
diff lwr upr p adj
bistro_box-bakery 81.42857 -30.91658 193.773727 0.2454413
hot_breakfast-bakery 25.71429 -86.63087 138.059441 0.9625883
petite-bakery -118.57143 -230.91658 -6.226273 0.0345797
sandwich-bakery 100.00000 -12.34516 212.345155 0.0995024
hot_breakfast-bistro_box -55.71429 -168.05944 56.630870 0.6085996
petite-bistro_box -200.00000 -312.34516 -87.654845 0.0001347
sandwich-bistro_box 18.57143 -93.77373 130.916584 0.9886697
petite-hot_breakfast -144.28571 -256.63087 -31.940559 0.0067033
sandwich-hot_breakfast 74.28571 -38.05944 186.630870 0.3300743
sandwich-petite 218.57143 106.22627 330.916584 0.00003543 HASIL DAN PEMBAHASAN
3.1 Tabel Anova Cara Manual
H0 : Tidak terdapat perbedaan rata-rata kategori menu pada kalori yang terkandung H1 : Terdapat perbedaan rata-rata kategori menu pada kalori yang terkandung
> hasil <- data.frame(
+ SK = c("Perlakuan", "Galat", "Total"),
+ DB = c(DBp, DBg, DBt),
+ JK = c(JKp, JKg, JKt),
+ KT = c(KTp, KTg, NA),
+ Fhit = c(Fhit, NA, NA),
+ p.Val = c(pVal, NA, NA))
Error in eval(expr, envir, enclos): object 'pVal' not found
> hasil
Error in eval(expr, envir, enclos): object 'hasil' not found3.2 Tabel Anova Function
H0 : Tidak terdapat perbedaan rata-rata kategori menu pada kalori yang terkandung H1 : Terdapat perbedaan rata-rata kategori menu pada kalori yang terkandung
> fungsi <- as.formula("y ~ x")
> model <- aov(fungsi, fix)
> summary(model)
Df Sum Sq Mean Sq F value Pr(>F)
x 4 208474 52119 9.926 3.07e-05 ***
Residuals 30 157514 5250
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Keputusan : Tolak H0 karena p value < 0.05 Kesimpulan : Jadi dapat disimpulkan bahwa terdapat perbedaan rata-rata kategori menu pada kalori yang terkandung
3.3 Pengujian Asumsi ANOVA
3.3.1 Uji Normalitas
H0 : Residual menyebar secara normal H1 : Residual tidak menyebar secara normal
> shapiro.test(sisaan)
Shapiro-Wilk normality test
data: sisaan
W = 0.92484, p-value = 0.0197Keputusan : Tolak H0 karena 0.0197 < 0.05 Kesimpulan : Jadi dapat disimpulkan bahwa residual berdistribusi secara normal sehingga asumsi normalitas pada anova dapat terpenuhi
3.3.2 Uji Homogenitas Ragam
H0 : Ragam antar perlakuan sama H1 : Ragam antar perlakuan tidak sama
> library(car)
> leveneTest(y ~ x,data=fix)
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 4 2.1782 0.09552 .
30
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Keputusan : Terima H0 karena 0.09552 < 0.05 Kesimpulan : Jadi dapat disimpulkan bahwa ragam antar perlakuan sama sehingga asumsi homogenitas ragam pada anova dapat terpenuhi
3.3.3 Uji Lanjut BNT
H0 : Tidak terdapat perbedaan rata-rata antar perlakuan H1 : Terdapat perbedaan rata-rata antar perlakuan
> bnt <- LSD.test(model,"x",alpha=0.05)
> bnt
$statistics
MSerror Df Mean CV t.value LSD
5250.476 30 313.4286 23.11856 2.042272 79.10046
$parameters
test p.ajusted name.t ntr alpha
Fisher-LSD none x 5 0.05
$means
y std r LCL UCL Min Max Q25 Q50 Q75
bakery 295.7143 96.41182 7 239.7818 351.6468 140 420 245 300 360
bistro_box 377.1429 64.47591 7 321.2104 433.0753 270 480 355 380 400
hot_breakfast 321.4286 106.36863 7 265.4961 377.3610 140 500 295 320 350
petite 177.1429 11.12697 7 121.2104 233.0753 160 190 170 180 185
sandwich 395.7143 36.90399 7 339.7818 451.6468 350 460 375 390 410
$comparison
NULL
$groups
y groups
sandwich 395.7143 a
bistro_box 377.1429 a
hot_breakfast 321.4286 ab
bakery 295.7143 b
petite 177.1429 c
attr(,"class")
[1] "group"Keputusan : Tolak H0 Kesimpulan : Jadi dapat disimpulkan bahwa terdapat perbedaan rata-rata antar perlakuan namun apabila memiliki simbol abjad yang sama maka tidak signifikan dalam rata-rata perlakuan
3.3.4 Uji Lanjut BNJ
H0 : Tidak terdapat perbedaan rata-rata antar perlakuan H1 : Terdapat perbedaan rata-rata antar perlakuan
> bnj <- TukeyHSD(model,conf.level=0.95)
> bnj
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = fungsi, data = fix)
$x
diff lwr upr p adj
bistro_box-bakery 81.42857 -30.91658 193.773727 0.2454413
hot_breakfast-bakery 25.71429 -86.63087 138.059441 0.9625883
petite-bakery -118.57143 -230.91658 -6.226273 0.0345797
sandwich-bakery 100.00000 -12.34516 212.345155 0.0995024
hot_breakfast-bistro_box -55.71429 -168.05944 56.630870 0.6085996
petite-bistro_box -200.00000 -312.34516 -87.654845 0.0001347
sandwich-bistro_box 18.57143 -93.77373 130.916584 0.9886697
petite-hot_breakfast -144.28571 -256.63087 -31.940559 0.0067033
sandwich-hot_breakfast 74.28571 -38.05944 186.630870 0.3300743
sandwich-petite 218.57143 106.22627 330.916584 0.0000354Keputusan :Tolak H0 karena p value < 0.05 Kesimpulan : Jadi dapat disimpulkan bahwa petite-bakery, petite-bistro_box, petite-hot_breakfast dan sandwich-petite mempunyai perbedaan rata-rata
4 DAFTAR PUSTAKA
Myers, R.H. (1990). Classical and Modern Regression with Applications. PWS-KENT, Boston, Massachusetts.
Zach. (2021). Fisher’s Least Significant Difference: Definition + Example. Diakses pada 28 Mei 2023, dari https://www.statology.org/fishers-least-significant-difference/ Rumusstatistik. (2022). Contoh Soal Anova Satu Arah dan Penyelesaiannya. Diakses pada 29 Mei 2023, dari https://www.rumusstatistik.com/2021/05/contoh-soal-anova-satu-arah-dan.html