Analisis Anova (One Way) Pada Kasus Pengaruh Kategori Menu Starbucks Terhadap Kalori Yang Terkandung

Isnaini Aisy Kwinta Evlina

25 September 2023

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 280

2.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")
> plot1

2.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 found

Dengan 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.0197

2.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 ' ' 1

2.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.0000354

3 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 found

3.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 ' ' 1

Keputusan : 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.0197

Keputusan : 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 ' ' 1

Keputusan : 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.0000354

Keputusan :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