Matriks Model Linier Umum

y <- matrix(c(18.50, 17.70, 18, 10.70, 11.20, 11.20, 1.6, 2, 1.89), nrow=9, ncol=1)
y
##        [,1]
##  [1,] 18.50
##  [2,] 17.70
##  [3,] 18.00
##  [4,] 10.70
##  [5,] 11.20
##  [6,] 11.20
##  [7,]  1.60
##  [8,]  2.00
##  [9,]  1.89
X <- matrix(c(1,1,0,0,1,1,0,0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1), nrow=9, ncol=4, byrow=T)
X
##       [,1] [,2] [,3] [,4]
##  [1,]    1    1    0    0
##  [2,]    1    1    0    0
##  [3,]    1    1    0    0
##  [4,]    1    0    1    0
##  [5,]    1    0    1    0
##  [6,]    1    0    1    0
##  [7,]    1    0    0    1
##  [8,]    1    0    0    1
##  [9,]    1    0    0    1

Matriks X’X dan X’y

XtX <- t(X)%*%X
XtX
##      [,1] [,2] [,3] [,4]
## [1,]    9    3    3    3
## [2,]    3    3    0    0
## [3,]    3    0    3    0
## [4,]    3    0    0    3
Xty <- t(X)%*%y
Xty
##       [,1]
## [1,] 92.79
## [2,] 54.20
## [3,] 33.10
## [4,]  5.49

Reparameterisasi X’X

xtx <- matrix(c(3,0,0,0,3,0,0,0,3), 3,3)
xtx
##      [,1] [,2] [,3]
## [1,]    3    0    0
## [2,]    0    3    0
## [3,]    0    0    3
xtx_i <- solve(xtx)
xtx_i
##           [,1]      [,2]      [,3]
## [1,] 0.3333333 0.0000000 0.0000000
## [2,] 0.0000000 0.3333333 0.0000000
## [3,] 0.0000000 0.0000000 0.3333333
xty <- matrix(c(54.20, 33.10, 5.49), 3, 1)
xty
##       [,1]
## [1,] 54.20
## [2,] 33.10
## [3,]  5.49
betha <- xtx_i %*% xty
betha
##          [,1]
## [1,] 18.06667
## [2,] 11.03333
## [3,]  1.83000
miu <- (betha[1,]+betha[2,]+betha[3,])/3
miu
## [1] 10.31
miu.ok <- matrix(c(10.31,10.31,10.31),3,1)
miu.ok
##       [,1]
## [1,] 10.31
## [2,] 10.31
## [3,] 10.31
betha.ok <- betha - miu.ok
betha.ok
##            [,1]
## [1,]  7.7566667
## [2,]  0.7233333
## [3,] -8.4800000

Uji asumsi ANOVA

# Data hasil percobaan
data_ral <- data.frame(
  Jenis_Tanaman = factor(rep(c("Daun Singkong", "Daun Bayam", "Daun Selada"), each = 3)),
  Kandungan_Klorofil = c(18.50, 17.70, 18.00, 10.70, 11.20, 11.20, 1.60, 2.00, 1.89)
)
# Model ANOVA
anova_model <- aov(Kandungan_Klorofil ~ Jenis_Tanaman, data = data_ral)

# Residual model
residuals_anova <- residuals(anova_model)

# Uji Shapiro-Wilk
shapiro_test <- shapiro.test(residuals_anova)

# Output uji normalitas
cat("4.5.1 Pengujian Asumsi Normalitas Galat\n")
## 4.5.1 Pengujian Asumsi Normalitas Galat
cat("Hipotesis:\n")
## Hipotesis:
cat("H0: e_ij ~ N(μ, σ^2) dengan μ = 0\n")
## H0: e_ij ~ N(μ, σ^2) dengan μ = 0
cat("H1: e_ij ~ N(μ, σ^2) dengan μ ≠ 0\n")
## H1: e_ij ~ N(μ, σ^2) dengan μ ≠ 0
cat("\nHasil Uji Normalitas Galat:\n")
## 
## Hasil Uji Normalitas Galat:
cat("Statistik W =", round(shapiro_test$statistic, 3), "\n")
## Statistik W = 0.933
cat("p-value =", round(shapiro_test$p.value, 3), "\n")
## p-value = 0.514
if (shapiro_test$p.value > 0.05) {
  cat("Kesimpulan: p-value > 0.05, sehingga H0 diterima. Data residual berdistribusi normal.\n")
} else {
  cat("Kesimpulan: p-value <= 0.05, sehingga H0 ditolak. Data residual tidak berdistribusi normal.\n")
}
## Kesimpulan: p-value > 0.05, sehingga H0 diterima. Data residual berdistribusi normal.
# Uji Bartlett untuk homogenitas variansi
bartlett_test <- bartlett.test(Kandungan_Klorofil ~ Jenis_Tanaman, data = data_ral)

# Output uji homogenitas
cat("\n4.5.2 Pengujian Kehomogenan Ragam Galat\n")
## 
## 4.5.2 Pengujian Kehomogenan Ragam Galat
cat("Hipotesis:\n")
## Hipotesis:
cat("H0: σ1^2 = σ2^2 = ... = σk^2\n")
## H0: σ1^2 = σ2^2 = ... = σk^2
cat("H1: Paling tidak terdapat satu i di mana σi^2 ≠ σj^2\n")
## H1: Paling tidak terdapat satu i di mana σi^2 ≠ σj^2
cat("\nHasil Uji Bartlett:\n")
## 
## Hasil Uji Bartlett:
cat("Statistik Chi-sq =", round(bartlett_test$statistic, 3), "\n")
## Statistik Chi-sq = 0.711
cat("p-value =", round(bartlett_test$p.value, 3), "\n")
## p-value = 0.701
if (bartlett_test$p.value > 0.05) {
  cat("Kesimpulan: p-value > 0.05, sehingga H0 diterima. Variansi antar kelompok homogen.\n")
} else {
  cat("Kesimpulan: p-value <= 0.05, sehingga H0 ditolak. Variansi antar kelompok tidak homogen.\n")
}
## Kesimpulan: p-value > 0.05, sehingga H0 diterima. Variansi antar kelompok homogen.
# Tambahkan package car untuk Levene's Test
if (!require(car)) install.packages("car")
## Loading required package: 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(car)

# Uji Levene
levene_test <- leveneTest(Kandungan_Klorofil ~ Jenis_Tanaman, data = data_ral)

# Output uji homogenitas ragam
cat("\n4.5.2 Pengujian Kehomogenan Ragam Galat (Levene's Test)\n")
## 
## 4.5.2 Pengujian Kehomogenan Ragam Galat (Levene's Test)
cat("Hipotesis:\n")
## Hipotesis:
cat("H0: Variansi antar kelompok homogen\n")
## H0: Variansi antar kelompok homogen
cat("H1: Variansi antar kelompok tidak homogen\n")
## H1: Variansi antar kelompok tidak homogen
# Format hasil Levene's Test
tabel_levene <- data.frame(
  Faktor = c("Jenis Tanaman"),
  "Statistik Uji (F)" = round(levene_test$"F value", 3),
  "Nilai-p" = round(levene_test$"Pr(>F)", 3)
)

print(tabel_levene)
##          Faktor Statistik.Uji..F. Nilai.p
## 1 Jenis Tanaman             0.258   0.781
## 2 Jenis Tanaman                NA      NA
# Kesimpulan
if (levene_test$"Pr(>F)"[1] > 0.05) {
  cat("\nKesimpulan: p-value > 0.05, sehingga H0 diterima. Variansi antar kelompok homogen.\n")
} else {
  cat("\nKesimpulan: p-value <= 0.05, sehingga H0 ditolak. Variansi antar kelompok tidak homogen.\n")
}
## 
## Kesimpulan: p-value > 0.05, sehingga H0 diterima. Variansi antar kelompok homogen.
# Hitung NAT (residual kuadrat)
data_ral$NAT <- residuals_anova^2

# Model dengan NAT
model_aditivitas <- lm(Kandungan_Klorofil ~ Jenis_Tanaman + NAT, data = data_ral)

# Tabel ANOVA
anova_aditivitas <- anova(model_aditivitas)

# Output uji aditivitas
cat("\n4.5.3 Pengujian Keaditifan Model\n")
## 
## 4.5.3 Pengujian Keaditifan Model
cat("Hipotesis:\n")
## Hipotesis:
cat("H0: ω = 0\n")
## H0: ω = 0
cat("H1: ω ≠ 0\n")
## H1: ω ≠ 0
cat("\nTabel 4.3. Hasil Pengujian Keaditifan Model:\n")
## 
## Tabel 4.3. Hasil Pengujian Keaditifan Model:
# Format tabel ANOVA
tabel_aditivitas <- data.frame(
  SK = c("Perlakuan", "NAT", "Galat", "Total"),
  db = c(anova_aditivitas$Df[1:3], sum(anova_aditivitas$Df)),
  JK = round(c(anova_aditivitas$"Sum Sq"[1:3], sum(anova_aditivitas$"Sum Sq")), 3),
  KT = round(c(anova_aditivitas$"Mean Sq"[1:3], NA), 3),
  F_hit = c(round(anova_aditivitas$"F value"[1:2], 3), "-", "-"),
  p_value = c(round(anova_aditivitas$"Pr(>F)"[1:2], 3), "-", "-")
)

print(tabel_aditivitas)
##          SK db      JK      KT    F_hit p_value
## 1 Perlakuan  2 397.798 198.899 1719.562       0
## 2       NAT  1   0.000   0.000    0.003   0.956
## 3     Galat  5   0.578   0.116        -       -
## 4     Total  8 398.377      NA        -       -
# Kesimpulan uji NAT
if (anova_aditivitas$"Pr(>F)"[2] > 0.05) {
  cat("\nKesimpulan: p-value NAT lebih dari 0.05, H0 diterima. Model dianggap aditif.\n")
} else {
  cat("\nKesimpulan: p-value NAT kurang dari atau sama dengan 0.05, H0 ditolak. Model tidak aditif.\n")
}
## 
## Kesimpulan: p-value NAT lebih dari 0.05, H0 diterima. Model dianggap aditif.
# Load library
if (!require(car)) install.packages("car")
library(car)

# Data residual dari model ANOVA awal
anova_model <- aov(Kandungan_Klorofil ~ Jenis_Tanaman, data = data_ral)
residuals_abs <- abs(residuals(anova_model)) # Hitung nilai absolut residual

# Tambahkan nilai absolut residual ke dataset sebagai peubah Z
data_ral$Z <- residuals_abs

# ANOVA untuk uji Levene berdasarkan peubah Z
anova_levene <- aov(Z ~ Jenis_Tanaman, data = data_ral)

# Tabel ANOVA untuk uji Levene
anova_table <- anova(anova_levene)

# Output ANOVA
cat("\nTabel 4.4. Analisis Ragam untuk Peubah Z:\n")
## 
## Tabel 4.4. Analisis Ragam untuk Peubah Z:
tabel_homogenitas <- data.frame(
  SK = c("Perlakuan", "Galat", "Total"),
  db = c(anova_table$Df[1], anova_table$Df[2], sum(anova_table$Df)),
  JK = round(c(anova_table$"Sum Sq"[1], anova_table$"Sum Sq"[2], sum(anova_table$"Sum Sq")), 3),
  KT = round(c(anova_table$"Mean Sq"[1], anova_table$"Mean Sq"[2], NA), 3),
  "Statistik Uji F" = c(round(anova_table$"F value"[1], 3), "-", "-")
)

print(tabel_homogenitas)
##          SK db    JK    KT Statistik.Uji.F
## 1 Perlakuan  2 0.028 0.014           0.754
## 2     Galat  6 0.110 0.018               -
## 3     Total  8 0.137    NA               -
# Hitung F kritis untuk α = 0.01
f_critical <- qf(0.99, df1 = anova_table$Df[1], df2 = anova_table$Df[2])
cat("\nF-kritis (α = 0.01) =", round(f_critical, 3), "\n")
## 
## F-kritis (α = 0.01) = 10.925
# Kesimpulan uji Levene
if (anova_table$"F value"[1] < f_critical) {
  cat("Kesimpulan: F-hitung < F-kritis, sehingga H0 diterima. Ragam galat bersifat homogen.\n")
} else {
  cat("Kesimpulan: F-hitung >= F-kritis, sehingga H0 ditolak. Ragam galat tidak bersifat homogen.\n")
}
## Kesimpulan: F-hitung < F-kritis, sehingga H0 diterima. Ragam galat bersifat homogen.
# Data ANOVA (Menggunakan data Anda sebelumnya)
data_ral <- data.frame(
  Jenis_Tanaman = factor(c(rep("Singkong", 3), rep("Bayam", 3), rep("Selada", 3))),
  Kandungan_Klorofil = c(18.50, 17.70, 18.00, 10.70, 11.20, 11.20, 1.60, 2.00, 1.89)
)

# Model Penuh: Semua faktor dimasukkan
model_penuh <- aov(Kandungan_Klorofil ~ Jenis_Tanaman, data = data_ral)

# Model Tereduksi: Tanpa faktor Jenis_Tanaman (Hanya mean total)
model_tereduksi <- aov(Kandungan_Klorofil ~ 1, data = data_ral)

# Bandingkan kedua model
anova_perbandingan <- anova(model_tereduksi, model_penuh)

# Tabel ANOVA untuk model penuh
anova_penuh <- summary(model_penuh)

# Output Tabel ANOVA
cat("\nTabel ANOVA Model Penuh:\n")
## 
## Tabel ANOVA Model Penuh:
tabel_penuh <- data.frame(
  SK = c("Jenis Tanaman", "Galat"),
  db = c(anova_penuh[[1]][["Df"]][1], anova_penuh[[1]][["Df"]][2]),
  JK = round(c(anova_penuh[[1]][["Sum Sq"]][1], anova_penuh[[1]][["Sum Sq"]][2]), 3),
  KT = round(c(anova_penuh[[1]][["Mean Sq"]][1], anova_penuh[[1]][["Mean Sq"]][2]), 3),
  "Statistik Uji F" = c(round(anova_penuh[[1]][["F value"]][1], 3), "-")
)
print(tabel_penuh)
##              SK db      JK      KT Statistik.Uji.F
## 1 Jenis Tanaman  2 397.798 198.899        2062.082
## 2         Galat  6   0.579   0.096               -
# Tabel Perbandingan Model
cat("\nTabel Perbandingan Model (Penuh vs Tereduksi):\n")
## 
## Tabel Perbandingan Model (Penuh vs Tereduksi):
tabel_perbandingan <- data.frame(
  SK = c("Model Tereduksi", "Model Penuh"),
  db = c(anova_perbandingan$Df[1], anova_perbandingan$Df[2]),
  JK = round(anova_perbandingan$"Sum of Sq", 3),
  KT = c("-", "-"),
  "Statistik Uji F" = round(anova_perbandingan$"F", 3),
  "Nilai-p" = round(anova_perbandingan$"Pr(>F)", 3)
)
print(tabel_perbandingan)
##                SK db      JK KT Statistik.Uji.F Nilai.p
## 1 Model Tereduksi NA      NA  -              NA      NA
## 2     Model Penuh  2 397.798  -        2062.082       0
# Kesimpulan
if (anova_perbandingan$"Pr(>F)"[2] < 0.05) {
  cat("\nKesimpulan: Model penuh lebih baik (Faktor Jenis Tanaman signifikan).\n")
} else {
  cat("\nKesimpulan: Tidak ada perbedaan signifikan antara model penuh dan tereduksi.\n")
}
## 
## Kesimpulan: Model penuh lebih baik (Faktor Jenis Tanaman signifikan).

TABEL ANOVA

y
##        [,1]
##  [1,] 18.50
##  [2,] 17.70
##  [3,] 18.00
##  [4,] 10.70
##  [5,] 11.20
##  [6,] 11.20
##  [7,]  1.60
##  [8,]  2.00
##  [9,]  1.89
z <- matrix(c(rep(1,9)),9,1)
z
##       [,1]
##  [1,]    1
##  [2,]    1
##  [3,]    1
##  [4,]    1
##  [5,]    1
##  [6,]    1
##  [7,]    1
##  [8,]    1
##  [9,]    1
jkter <- t(y)%*%z%*%solve(t(z)%*%z)%*%t(z)%*%y
jkter
##          [,1]
## [1,] 956.6649
jkpen <- 1354.46
jkhip <- jkpen - jkter
jktot <- t(y)%*%y
jktot
##          [,1]
## [1,] 1355.042
jkres <- jktot - jkpen
jkres
##        [,1]
## [1,] 0.5821
fhit <- (jkhip/2)/(jkres/6)
fhit <- 198.9/0.097

ANOVA Function

data <- data.frame(
  Tanaman = rep(c("Daun Singkong", "Daun Bayam", "Daun Selada"), each = 3),
  Ulangan = rep(1:3, times = 3),
  Klorofil = c(18.50, 17.70, 18.00, 10.70, 11.20, 11.20, 1.60, 2.00, 1.89)
)
OlahRAL = aov(Klorofil~Tanaman, data=data)
summary(OlahRAL)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Tanaman      2  397.8   198.9    2062 3.07e-09 ***
## Residuals    6    0.6     0.1                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
qf(0.05,2,6,lower.tail=F)
## [1] 5.143253