Two Way Anova
set.seed(123)
wilayah <- factor(rep(c("Wilayah A", "Wilayah B", "Wilayah C"), each = 30))
pendidikan <- factor(rep(c("SMA", "Sarjana"), times = 45))
penjualan <- c(rnorm(30, mean = 500, sd = 50), # Wilayah A, SMA
rnorm(30, mean = 550, sd = 60), # Wilayah B, SMA
rnorm(30, mean = 600, sd = 55), # Wilayah C, SMA
rnorm(30, mean = 700, sd = 50), # Wilayah A, Sarjana
rnorm(30, mean = 750, sd = 60), # Wilayah B, Sarjana
rnorm(30, mean = 800, sd = 55)) # Wilayah C, Sarjana
data <- data.frame(wilayah, pendidikan, penjualan)
head(data)
## wilayah pendidikan penjualan
## 1 Wilayah A SMA 471.9762
## 2 Wilayah A Sarjana 488.4911
## 3 Wilayah A SMA 577.9354
## 4 Wilayah A Sarjana 503.5254
## 5 Wilayah A SMA 506.4644
## 6 Wilayah A Sarjana 585.7532
boxplot(penjualan ~ wilayah * pendidikan, data = data,
main = "Penjualan Berdasarkan Wilayah dan Tingkat Pendidikan",
xlab = "Wilayah dan Tingkat Pendidikan", ylab = "Penjualan", col = "orange", las = 2)

# Membuat QQ Plot untuk memeriksa normalitas
par(mfrow = c(2, 3)) # Membagi plot menjadi 6 bagian
qqnorm(data$penjualan[data$wilayah == "Wilayah A" & data$pendidikan == "SMA"], main = "Wilayah A - SMA")
qqline(data$penjualan[data$wilayah == "Wilayah A" & data$pendidikan == "SMA"], col = "green")
qqnorm(data$penjualan[data$wilayah == "Wilayah B" & data$pendidikan == "SMA"], main = "Wilayah B - SMA")
qqline(data$penjualan[data$wilayah == "Wilayah B" & data$pendidikan == "SMA"], col = "green")
qqnorm(data$penjualan[data$wilayah == "Wilayah C" & data$pendidikan == "SMA"], main = "Wilayah C - SMA")
qqline(data$penjualan[data$wilayah == "Wilayah C" & data$pendidikan == "SMA"], col = "green")
qqnorm(data$penjualan[data$wilayah == "Wilayah A" & data$pendidikan == "Sarjana"], main = "Wilayah A - Sarjana")
qqline(data$penjualan[data$wilayah == "Wilayah A" & data$pendidikan == "Sarjana"], col = "green")
qqnorm(data$penjualan[data$wilayah == "Wilayah B" & data$pendidikan == "Sarjana"], main = "Wilayah B - Sarjana")
qqline(data$penjualan[data$wilayah == "Wilayah B" & data$pendidikan == "Sarjana"], col = "green")
qqnorm(data$penjualan[data$wilayah == "Wilayah C" & data$pendidikan == "Sarjana"], main = "Wilayah C - Sarjana")
qqline(data$penjualan[data$wilayah == "Wilayah C" & data$pendidikan == "Sarjana"], col = "green")

# Uji normalitas menggunakan Shapiro-Wilk Test untuk setiap kombinasi
shapiro.test(data$penjualan[data$wilayah == "Wilayah A" & data$pendidikan == "SMA"])
##
## Shapiro-Wilk normality test
##
## data: data$penjualan[data$wilayah == "Wilayah A" & data$pendidikan == "SMA"]
## W = 0.93143, p-value = 0.05361
shapiro.test(data$penjualan[data$wilayah == "Wilayah B" & data$pendidikan == "SMA"])
##
## Shapiro-Wilk normality test
##
## data: data$penjualan[data$wilayah == "Wilayah B" & data$pendidikan == "SMA"]
## W = 0.94816, p-value = 0.1509
shapiro.test(data$penjualan[data$wilayah == "Wilayah C" & data$pendidikan == "SMA"])
##
## Shapiro-Wilk normality test
##
## data: data$penjualan[data$wilayah == "Wilayah C" & data$pendidikan == "SMA"]
## W = 0.86482, p-value = 0.001288
shapiro.test(data$penjualan[data$wilayah == "Wilayah A" & data$pendidikan == "Sarjana"])
##
## Shapiro-Wilk normality test
##
## data: data$penjualan[data$wilayah == "Wilayah A" & data$pendidikan == "Sarjana"]
## W = 0.9314, p-value = 0.0535
shapiro.test(data$penjualan[data$wilayah == "Wilayah B" & data$pendidikan == "Sarjana"])
##
## Shapiro-Wilk normality test
##
## data: data$penjualan[data$wilayah == "Wilayah B" & data$pendidikan == "Sarjana"]
## W = 0.94832, p-value = 0.1524
shapiro.test(data$penjualan[data$wilayah == "Wilayah C" & data$pendidikan == "Sarjana"])
##
## Shapiro-Wilk normality test
##
## data: data$penjualan[data$wilayah == "Wilayah C" & data$pendidikan == "Sarjana"]
## W = 0.97031, p-value = 0.5478
anova_result <- aov(penjualan ~ wilayah * pendidikan, data = data)
summary(anova_result)
## Df Sum Sq Mean Sq F value Pr(>F)
## wilayah 2 352699 176349 14.012 2.28e-06 ***
## pendidikan 1 36 36 0.003 0.958
## wilayah:pendidikan 2 331 166 0.013 0.987
## Residuals 174 2189951 12586
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
TukeyHSD(anova_result)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = penjualan ~ wilayah * pendidikan, data = data)
##
## $wilayah
## diff lwr upr p adj
## Wilayah B-Wilayah A 53.36756 4.948196 101.7869 0.0268129
## Wilayah C-Wilayah A 108.42359 60.004227 156.8429 0.0000011
## Wilayah C-Wilayah B 55.05603 6.636671 103.4754 0.0214135
##
## $pendidikan
## diff lwr upr p adj
## SMA-Sarjana 0.8915693 -32.11615 33.89929 0.9575451
##
## $`wilayah:pendidikan`
## diff lwr upr p adj
## Wilayah B:Sarjana-Wilayah A:Sarjana 56.6718917 -26.80230 140.14608 0.3717583
## Wilayah C:Sarjana-Wilayah A:Sarjana 110.3733818 26.89919 193.84757 0.0026096
## Wilayah A:SMA-Wilayah A:Sarjana 4.3943243 -79.07987 87.86851 0.9999887
## Wilayah B:SMA-Wilayah A:Sarjana 54.4575432 -29.01665 137.93173 0.4179423
## Wilayah C:SMA-Wilayah A:Sarjana 110.8681139 27.39392 194.34230 0.0024532
## Wilayah C:Sarjana-Wilayah B:Sarjana 53.7014901 -29.77270 137.17568 0.4342048
## Wilayah A:SMA-Wilayah B:Sarjana -52.2775673 -135.75176 31.19662 0.4653997
## Wilayah B:SMA-Wilayah B:Sarjana -2.2143485 -85.68854 81.25984 0.9999996
## Wilayah C:SMA-Wilayah B:Sarjana 54.1962222 -29.27797 137.67041 0.4235374
## Wilayah A:SMA-Wilayah C:Sarjana -105.9790574 -189.45325 -22.50487 0.0044683
## Wilayah B:SMA-Wilayah C:Sarjana -55.9158385 -139.39003 27.55835 0.3872657
## Wilayah C:SMA-Wilayah C:Sarjana 0.4947321 -82.97946 83.96892 1.0000000
## Wilayah B:SMA-Wilayah A:SMA 50.0632189 -33.41097 133.53741 0.5150392
## Wilayah C:SMA-Wilayah A:SMA 106.4737895 22.99960 189.94798 0.0042100
## Wilayah C:SMA-Wilayah B:SMA 56.4105707 -27.06362 139.88476 0.3770858