# PACKAGES
library(car)
## Warning: package 'car' was built under R version 4.5.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.5.3
library(agricolae)
## Warning: package 'agricolae' was built under R version 4.5.3
# MEMANGGIL DATA
data <- read.table(file.choose(), header = TRUE)
data
##   Tablet Pelarut Nilai
## 1      1       1 46.18
## 2      2       1 57.69
## 3      3       1 48.61
## 4      1       2 54.54
## 5      2       2 71.57
## 6      3       2 51.01
## 7      1       3 56.63
## 8      2       3 81.51
## 9      3       3 80.02
# PENDEFINISIAN VARIABEL

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"))

data
##      Tablet    Pelarut Nilai
## 1       CDR  Air Biasa 46.18
## 2   Redoxon  Air Biasa 57.69
## 3 Enervon-C  Air Biasa 48.61
## 4       CDR   Air Soda 54.54
## 5   Redoxon   Air Soda 71.57
## 6 Enervon-C   Air Soda 51.01
## 7       CDR Air Kelapa 56.63
## 8   Redoxon Air Kelapa 81.51
## 9 Enervon-C Air Kelapa 80.02
# UJI NORMALITAS PER MERK TABLET

for(i in levels(data$Tablet)){
  cat("\nUji Normalitas untuk Merk Tablet:", i, "\n")
  print(shapiro.test(data$Nilai[data$Tablet == i]))
}
## 
## Uji Normalitas untuk Merk Tablet: CDR 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Nilai[data$Tablet == i]
## W = 0.89286, p-value = 0.3631
## 
## 
## Uji Normalitas untuk Merk Tablet: Redoxon 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Nilai[data$Tablet == i]
## W = 0.99096, p-value = 0.8182
## 
## 
## Uji Normalitas untuk Merk Tablet: Enervon-C 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Nilai[data$Tablet == i]
## W = 0.80695, p-value = 0.1312
# UJI NORMALITAS PER JENIS PELARUT

for(j in levels(data$Pelarut)){
  cat("\nUji Normalitas untuk Jenis Pelarut:", j, "\n")
  print(shapiro.test(data$Nilai[data$Pelarut == j]))
}
## 
## Uji Normalitas untuk Jenis Pelarut: Air Biasa 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Nilai[data$Pelarut == j]
## W = 0.89987, p-value = 0.3851
## 
## 
## Uji Normalitas untuk Jenis Pelarut: Air Soda 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Nilai[data$Pelarut == j]
## W = 0.87434, p-value = 0.3079
## 
## 
## Uji Normalitas untuk Jenis Pelarut: Air Kelapa 
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Nilai[data$Pelarut == j]
## W = 0.79474, p-value = 0.102
# UJI HOMOGENITAS VARIANSI

# Homogenitas berdasarkan Merk Tablet
leveneTest(Nilai ~ 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
# Homogenitas berdasarkan Jenis Pelarut
leveneTest(Nilai ~ 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
# UJI ANAVA DUA ARAH TANPA INTERAKSI

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
  
  # Jumlah Kuadrat Faktor A (Merk Tablet)
  JK_A <- sum(tapply(y, A, sum)^2)/(b*n) - FK
  
  # Jumlah Kuadrat Faktor B (Jenis Pelarut)
  JK_B <- sum(tapply(y, B, sum)^2)/(a*n) - FK
  
  # Jumlah Kuadrat Sel
  JKsel <- sum(tapply(y, list(A,B), sum)^2)/n - FK
  
  # Jumlah Kuadrat Interaksi
  JK_AB <- JKsel - JK_A - JK_B
  
  # Jumlah Kuadrat Galat
  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 <- JK/db
  
  F <- c(KT[1:3]/KT[4], NA, NA)
  
  p <- c(
    pf(F[1:3], db[1:3], db[4],
       lower.tail = FALSE),
    NA, NA
  )
  
  hasil <- data.frame(
    Sumber = c("Merk Tablet",
               "Jenis Pelarut",
               "Interaksi",
               "Galat",
               "Total"),
    db, JK, KT, F, p
  )
  
  return(hasil)
}

# MENJALANKAN ANAVA
# Model tanpa interaksi

anava2arah_tanpa <- function(y, A, B){
  
  a <- nlevels(A)
  b <- nlevels(B)
  N <- length(y)
  
  FK <- sum(y)^2/N
  JKT <- sum(y^2) - FK
  
  JK_A <- sum(tapply(y, A, sum)^2)/b - FK
  JK_B <- sum(tapply(y, B, sum)^2)/a - FK
  
  JKG <- JKT - JK_A - JK_B
  
  db <- c(a-1, b-1, (a-1)*(b-1), N-1)
  JK <- c(JK_A, JK_B, JKG, JKT)
  KT <- JK/db
  
  F <- c(KT[1:2]/KT[3], NA, NA)
  
  p <- c(
    pf(F[1:2], db[1:2], db[3],
       lower.tail = FALSE),
    NA, NA
  )
  
  data.frame(
    Sumber = c("Merk Tablet",
               "Jenis Pelarut",
               "Galat",
               "Total"),
    db, JK, KT, F, p
  )
}

# HASIL ANAVA MANUAL
anava2arah_tanpa(data$Nilai,
                 data$Tablet,
                 data$Pelarut)
##          Sumber db        JK        KT        F          p
## 1   Merk Tablet  2  479.9575 239.97874 4.269572 0.10176166
## 2 Jenis Pelarut  2  733.9193 366.95964 6.528748 0.05499073
## 3         Galat  4  224.8270  56.20674       NA         NA
## 4         Total  8 1438.7038 179.83797       NA         NA
# PEMBANDING DENGAN FUNGSI BAWAAN R
uji_anava <- aov(Nilai ~ Tablet + Pelarut,
                 data = data)

anova(uji_anava)
## Analysis of Variance Table
## 
## Response: Nilai
##           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