# 1. PACKAGES
library(car)
## Warning: package 'car' was built under R version 4.6.1
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.6.1
library(agricolae)
## Warning: package 'agricolae' was built under R version 4.6.1
# 2. MEMANGGIL DATA (.txt)
# Pilih file "data_percobaan.txt" saat jendela dialog muncul
data <- read.table(file.choose(), header = TRUE)
data
##   tablet pelarut  Data
## 1      1       1 46.18
## 2      1       2 54.54
## 3      1       3 56.63
## 4      2       1 57.69
## 5      2       2 71.57
## 6      2       3 81.51
## 7      3       1 48.61
## 8      3       2 51.01
## 9      3       3 80.02
# 3. PENDEFINISIAN VARIABEL (Faktor)
data$tablet  <- factor(data$tablet, levels = 1:3, labels = c("CDR", "Redoxon", "Enervon C"))
data$pelarut <- factor(data$pelarut, levels = 1:3, labels = c("Air Biasa", "Air Soda", "Air Kelapa"))
str(data)
## 'data.frame':    9 obs. of  3 variables:
##  $ tablet : Factor w/ 3 levels "CDR","Redoxon",..: 1 1 1 2 2 2 3 3 3
##  $ pelarut: Factor w/ 3 levels "Air Biasa","Air Soda",..: 1 2 3 1 2 3 1 2 3
##  $ Data   : num  46.2 54.5 56.6 57.7 71.6 ...
# 4. UJI NORMALITAS PER TABLET
for(j in levels(data$tablet)) {
  cat("\nUji Normalitas untuk tablet:", j, "\n")
  print(shapiro.test(data$Data[data$tablet == j]))
}
## 
## Uji Normalitas untuk tablet: CDR 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Data[data$tablet == j]
## W = 0.89286, p-value = 0.3631
## 
## 
## Uji Normalitas untuk tablet: Redoxon 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Data[data$tablet == j]
## W = 0.99096, p-value = 0.8182
## 
## 
## Uji Normalitas untuk tablet: Enervon C 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Data[data$tablet == j]
## W = 0.80695, p-value = 0.1312
# 5. UJI NORMALITAS PER PELARUT
for(i in levels(data$pelarut)) {
  cat("\nUji Normalitas untuk Pelarut:", i, "\n")
  print(shapiro.test(data$Data[data$pelarut == i]))
}
## 
## Uji Normalitas untuk Pelarut: Air Biasa 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Data[data$pelarut == i]
## W = 0.89987, p-value = 0.3851
## 
## 
## Uji Normalitas untuk Pelarut: Air Soda 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Data[data$pelarut == i]
## W = 0.87434, p-value = 0.3079
## 
## 
## Uji Normalitas untuk Pelarut: Air Kelapa 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Data[data$pelarut == i]
## W = 0.79474, p-value = 0.102
# 6. UJI HOMOGENITAS VARIANSI
leveneTest(Data ~ tablet, center = mean, data = data)
## Levene's Test for Homogeneity of Variance (center = mean)
##       Df F value Pr(>F)
## group  2  2.4902 0.1632
##        6
leveneTest(Data ~ pelarut, center = mean, data = data)
## Levene's Test for Homogeneity of Variance (center = mean)
##       Df F value Pr(>F)
## group  2  1.9806 0.2185
##        6
# Catatan: leveneTest(Data ~ tablet*pelarut) dilewati karena n = 1 per sel (tanpa ulangan)

# 7. FUNGSI ANAVA 2 ARAH MANUAL
anava2arah <- function(y, A, B){
  a <- nlevels(A); b <- nlevels(B)
  N <- length(y); n <- N / (a * b)
  
  FK    <- sum(y)^2 / N
  JKT   <- sum(y^2) - FK
  JK_A  <- sum(tapply(y, A, sum)^2) / (b * n) - FK
  JK_B  <- sum(tapply(y, B, sum)^2) / (a * n) - FK
  JKsel <- sum(tapply(y, list(A, B), sum)^2) / n - FK
  JK_AB <- JKsel - JK_A - JK_B
  JKG   <- JKT - JKsel
  
  db    <- c(a - 1, b - 1, (a - 1) * (b - 1), a * b * (n - 1), N - 1)
  JK    <- c(JK_A, JK_B, JK_AB, JKG, JKT)
  KT    <- ifelse(db > 0, JK / db, NA)
  
  # Karena n = 1 (db Galat murni = 0), interaksi (KT[3]) digunakan sebagai galat pengujian
  F_val <- c(KT[1:2] / KT[3], NA, NA, NA)
  p_val <- c(pf(F_val[1:2], db[1:2], db[3], lower.tail = FALSE), NA, NA, NA)
  
  data.frame(
    Sumber = c("Tablet", "Pelarut", "Tablet*Pelarut (Galat)", "Galat Murni", "Total"), 
    db = db, JK = JK, KT = KT, F_hitung = F_val, p_value = p_val
  )
}

# Memanggil fungsi manual dengan nama kolom y=data$Data, A=data$tablet, B=data$pelarut
anava2arah(y = data$Data, A = data$tablet, B = data$pelarut)
##                   Sumber db        JK        KT F_hitung    p_value
## 1                 Tablet  2  479.9575 239.97874 4.269572 0.10176166
## 2                Pelarut  2  733.9193 366.95964 6.528748 0.05499073
## 3 Tablet*Pelarut (Galat)  4  224.8270  56.20674       NA         NA
## 4            Galat Murni  0    0.0000        NA       NA         NA
## 5                  Total  8 1438.7038 179.83797       NA         NA
# 8. UJI ANOVA BAWAAN R (Model Aditif Tanpa Interaksi karena n = 1)
uji_anava <- aov(Data ~ tablet + pelarut, data = data)
anova(uji_anava)
## Analysis of Variance Table
## 
## Response: Data
##           Df Sum Sq Mean Sq F value  Pr(>F)  
## tablet     2 479.96  239.98  4.2696 0.10176  
## pelarut    2 733.92  366.96  6.5287 0.05499 .
## Residuals  4 224.83   56.21                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1