Memahami prinsip-prinsip fundamental dalam Perancangan Percobaan (Design of Experiment/DoE).
Menerapkan berbagai jenis rancangan percobaan, yaitu:
Rancangan Acak Lengkap (RAL)
Rancangan Acak Kelompok Lengkap (RAKL)
Rancangan Bujur Sangkar Latin (RBSL)
Melakukan Analisis Sidik Ragam (ANOVA) untuk percobaan dengan satu faktor.
Melaksanakan Uji Lanjut untuk menguji perbedaan antar perlakuan, seperti uji LSD, Tukey, Duncan, serta analisis Kontras Polinomial Ortogonal untuk tren.
Mengimplementasikan seluruh analisis tersebut secara praktis menggunakan perangkat lunak R.
Rancangan Percobaan (DoE) adalah metodologi sistematis untuk merencanakan, melaksanakan, menganalisis, dan menginterpretasikan data dari percobaan terkontrol dengan tujuan memperoleh informasi yang valid dan efisien mengenai hubungan sebab-akibat antara variabel respon dan faktor-faktor yang mempengaruhinya.
Karakteristik Utama DoE
Tujuan
Rancangan Acak Lengkap (RAL) atau Completely Randomized Design (CRD) adalah rancangan percobaan paling sederhana dimana seluruh unit percobaan dianggap homogen dan perlakuan dialokasikan secara acak tanpa pembatasan.
Ciri-Ciri RAL
Model Matematis
\[ Y_{ij} = \mu + \tau_i + \varepsilon_{ij} \]
Keterangan:
- \(Y_{ij}\): Respon ke-j pada
perlakuan ke-i
- \(\mu\): Rata-rata umum
- \(\tau_i\): Efek perlakuan ke-i
- \(\varepsilon_{ij}\): Galat
percobaan
Kondisi Penggunaan
Rancangan Acak Kelompok Lengkap (RAKL) atau Randomized Complete Block Design (RCBD) digunakan ketika unit percobaan tidak sepenuhnya homogen, sehingga perlu pengelompokan (blok) untuk mengontrol variasi yang diketahui.
Ciri-Ciri RAKL
Model Matematis
\[ Y_{ij} = \mu + \tau_i + \beta_j + \varepsilon_{ij} \]
Keterangan:
- \(Y_{ij}\): Respon pada perlakuan
i dan blok j
- \(\mu\): Rata-rata umum
- \(\tau_i\): Efek perlakuan ke-i
- \(\beta_j\): Efek blok ke-j
- \(\varepsilon_{ij}\): Galat
percobaan
Kondisi Penggunaan
Rancangan Bujur Sangkar Latin (RBSL) atau Latin Square Design (LSD) digunakan untuk mengontrol dua sumber variasi secara simultan dengan struktur baris dan kolom.
Ciri-Ciri RBSL
Model Matematis
\[ Y_{ijk} = \mu + \tau_i + \beta_j + \gamma_k + \varepsilon_{ijk} \]
Keterangan:
- \(Y_{ijk}\): Respon pada perlakuan
i, baris j, kolom k
- \(\mu\): Rata-rata umum
- \(\tau_i\): Efek perlakuan ke-i
- \(\beta_j\): Efek baris ke-j
- \(\gamma_k\): Efek kolom ke-k
- \(\varepsilon_{ijk}\): Galat
percobaan
Kondisi Penggunaan
Perbandingan RAL, RAKL, dan RBSL
| Aspek | RAL (CRD) | RAKL (RCBD) | RBSL (LSD) |
|---|---|---|---|
| Tingkat Homogenitas | Sangat tinggi | Sedang (ada blok) | Rendah (dua arah variasi) |
| Kompleksitas Desain | Sederhana | Sedang | Tinggi |
| Kontrol Variasi | Tidak ada | 1 sumber variasi | 2 sumber variasi |
| Efisiensi | Rendah jika tidak homogen | Baik | Sangat tinggi |
| Analisis Statistik | Sederhana (ANOVA satu arah) | Sedikit kompleks (dua arah) | Kompleks (tiga arah) |
| Cocok Untuk | Kondisi homogen | Percobaan lapangan | Kondisi kompleks dengan 2 faktor luar |
| Jumlah Perlakuan | Bebas | Sama tiap blok | Sama dengan jumlah baris dan kolom |
Tabel Kelebihan dan Kekurangan Tiap Rancangan
| Rancangan | Kelebihan | Kekurangan |
|---|---|---|
| RAL | - Sederhana dan mudah dianalisis - Derajat bebas galat maksimal - Fleksibel jumlah ulangan |
- Tidak efisien jika heterogen
- Tidak bisa kontrol variasi luar |
| RAKL | - Mengurangi galat melalui pengelompokan - Meningkatkan presisi - Cocok untuk variasi tanah |
- Kehilangan derajat bebas blok
|
| RBSL | - Kontrol dua sumber variasi - Efisiensi tinggi - Desain seimbang |
- Harus persegi (baris=kolom) - Tidak boleh ada interaksi - Sulit diterapkan untuk perlakuan banyak |
Uji lanjut dilakukan setelah ANOVA menunjukkan adanya perbedaan signifikan antar perlakuan, untuk mengetahui perlakuan mana yang berbeda satu sama lain.
Definisi:
Uji perbandingan berganda paling sederhana untuk mendeteksi perbedaan
antar dua rata-rata perlakuan.
Rumus: \[ LSD = t_{(\alpha/2, db_{galat})} \times \sqrt{\frac{2 \times KTG}{r}} \]
Karakteristik:
- Sensitif terhadap perbedaan kecil
- Risiko Type I error tinggi
- Cocok untuk perbandingan yang telah direncanakan
- Sesuai untuk jumlah perlakuan sedikit
Definisi:
Uji rentang berganda yang mengontrol experimentwise error rate
secara ketat.
Rumus: \[ HSD = q_{(\alpha, p, db_{galat})} \times \sqrt{\frac{KTG}{r}} \]
Karakteristik: - Lebih konservatif daripada
LSD
- Mengontrol tingkat kesalahan keseluruhan
- Cocok untuk semua perbandingan berpasangan
- Aman untuk jumlah perlakuan banyak
Definisi:
Uji rentang berganda yang menyesuaikan tingkat signifikansi berdasarkan
jarak antar rata-rata yang diurutkan.
Karakteristik: - Lebih powerful dari Tukey
- Berdasarkan protected LSD principle
- Cocok untuk screening awal
- Risiko kesalahan meningkat dengan banyak perlakuan
Definisi:
Teknik untuk menganalisis tren respon terhadap perlakuan kuantitatif
dengan mempartisi sum of squares perlakuan menjadi komponen
polinomial.
Komponen Polinomial: - Linear
- Kuadratik
- Kubik
- dan seterusnya hingga derajat (p–1)
Kegunaan: - Mengidentifikasi pola respon
- Membuat model dosis–respon
- Efisien dalam penggunaan derajat bebas
| Uji | Karakteristik Utama | Kegunaan Utama |
|---|---|---|
| Bonferroni | Sangat konservatif, modifikasi uji-t | Cocok untuk sedikit perbandingan |
| Scheffé | Paling konservatif, fleksibel | Cocok untuk kontras tidak terencana |
| Dunnett | Fokus pada perbandingan terhadap kontrol | Powerful untuk control comparison |
| Kondisi Penelitian | Uji Lanjut yang Disarankan |
|---|---|
| Penelitian eksploratori | Duncan atau LSD |
| Penelitian konfirmatori | Tukey atau Bonferroni |
| Perbandingan dengan kontrol | Dunnett |
| Analisis tren kuantitatif | Kontras polinomial ortogonal |
Sebuah perusahaan pengolahan ikan ingin mengevaluasi pengaruh 4 jenis kemasan berbeda (A, B, C, D) terhadap masa simpan fillet ikan nila pada suhu chilling (4°C). Parameter yang diukur adalah Total Plate Count (TPC) setelah 7 hari penyimpanan (log CFU/g). Setiap perlakuan diulang 5 kali.
# Data untuk RAL
set.seed(123)
data_ral <- data.frame(
Kemasan = rep(c("A", "B", "C", "D"), each = 5),
TPC = c(
# Kemasan A: 5.2, 5.4, 5.1, 5.3, 5.5
rnorm(5, mean = 5.3, sd = 0.15),
# Kemasan B: 4.8, 4.9, 4.7, 4.6, 5.0
rnorm(5, mean = 4.8, sd = 0.15),
# Kemasan C: 3.5, 3.6, 3.4, 3.7, 3.3
rnorm(5, mean = 3.5, sd = 0.15),
# Kemasan D: 6.1, 6.0, 6.2, 5.9, 6.3
rnorm(5, mean = 6.1, sd = 0.15)
)
)
data_ral## Df Sum Sq Mean Sq F value Pr(>F)
## Kemasan 3 17.497 5.832 235 1.94e-13 ***
## Residuals 16 0.397 0.025
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil ANOVA menunjukkan bahwa jenis kemasan berpengaruh sangat signifikan terhadap nilai TPC fillet ikan nila (p < 0.001). Artinya, perbedaan jenis kemasan menyebabkan perbedaan nyata pada masa simpan ikan.
##
## Shapiro-Wilk normality test
##
## data: residuals(anova_ral)
## W = 0.9752, p-value = 0.8585
## Warning: package 'car' was built under R version 4.5.1
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.5.1
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
## Warning: package 'agricolae' was built under R version 4.5.2
## $statistics
## MSerror Df Mean CV t.value LSD
## 0.02481421 16 4.946244 3.184745 2.119905 0.2112013
##
## $parameters
## test p.ajusted name.t ntr alpha
## Fisher-LSD none Kemasan 4 0.05
##
## $means
## TPC std r se LCL UCL Min Max Q25
## A 5.329036 0.12165328 5 0.07044744 5.179694 5.478377 5.215929 5.533806 5.265473
## B 4.793352 0.17452344 5 0.07044744 4.644010 4.942694 4.610241 5.057260 4.696972
## C 3.546185 0.09591948 5 0.07044744 3.396843 3.695527 3.416624 3.683612 3.516602
## D 6.116401 0.21165619 5 0.07044744 5.967059 6.265743 5.805007 6.368037 6.029081
## Q50 Q75
## A 5.310576 5.319393
## B 4.733151 4.869137
## C 3.553972 3.560116
## D 6.174678 6.205203
##
## $comparison
## NULL
##
## $groups
## TPC groups
## D 6.116401 a
## A 5.329036 b
## B 4.793352 c
## C 3.546185 d
##
## attr(,"class")
## [1] "group"
## $statistics
## MSerror Df Mean CV MSD
## 0.02481421 16 4.946244 3.184745 0.2850369
##
## $parameters
## test name.t ntr StudentizedRange alpha
## Tukey Kemasan 4 4.046093 0.05
##
## $means
## TPC std r se Min Max Q25 Q50 Q75
## A 5.329036 0.12165328 5 0.07044744 5.215929 5.533806 5.265473 5.310576 5.319393
## B 4.793352 0.17452344 5 0.07044744 4.610241 5.057260 4.696972 4.733151 4.869137
## C 3.546185 0.09591948 5 0.07044744 3.416624 3.683612 3.516602 3.553972 3.560116
## D 6.116401 0.21165619 5 0.07044744 5.805007 6.368037 6.029081 6.174678 6.205203
##
## $comparison
## NULL
##
## $groups
## TPC groups
## D 6.116401 a
## A 5.329036 b
## B 4.793352 c
## C 3.546185 d
##
## attr(,"class")
## [1] "group"
## $statistics
## MSerror Df Mean CV
## 0.02481421 16 4.946244 3.184745
##
## $parameters
## test name.t ntr alpha
## Duncan Kemasan 4 0.05
##
## $duncan
## Table CriticalRange
## 2 2.997999 0.2112013
## 3 3.143802 0.2214728
## 4 3.234945 0.2278936
##
## $means
## TPC std r se Min Max Q25 Q50 Q75
## A 5.329036 0.12165328 5 0.07044744 5.215929 5.533806 5.265473 5.310576 5.319393
## B 4.793352 0.17452344 5 0.07044744 4.610241 5.057260 4.696972 4.733151 4.869137
## C 3.546185 0.09591948 5 0.07044744 3.416624 3.683612 3.516602 3.553972 3.560116
## D 6.116401 0.21165619 5 0.07044744 5.805007 6.368037 6.029081 6.174678 6.205203
##
## $comparison
## NULL
##
## $groups
## TPC groups
## D 6.116401 a
## A 5.329036 b
## B 4.793352 c
## C 3.546185 d
##
## attr(,"class")
## [1] "group"
# Uji Kontras Polinomial Ortogonal
data_ral$Kemasan <- as.factor(data_ral$Kemasan)
contrasts(data_ral$Kemasan) <- contr.poly(4)
anova_poly <- aov(TPC ~ Kemasan, data = data_ral)
summary(anova_poly, split = list(Kemasan = list(linear = 1, quadratic = 2, cubic = 3)))## Df Sum Sq Mean Sq F value Pr(>F)
## Kemasan 3 17.497 5.832 235.04 1.94e-13 ***
## Kemasan: linear 1 0.311 0.311 12.52 0.00273 **
## Kemasan: quadratic 1 12.058 12.058 485.94 2.12e-13 ***
## Kemasan: cubic 1 5.128 5.128 206.64 1.44e-10 ***
## Residuals 16 0.397 0.025
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Warning: package 'tidyverse' was built under R version 4.5.1
## Warning: package 'ggplot2' was built under R version 4.5.1
## Warning: package 'tibble' was built under R version 4.5.1
## Warning: package 'tidyr' was built under R version 4.5.1
## Warning: package 'readr' was built under R version 4.5.1
## Warning: package 'purrr' was built under R version 4.5.1
## Warning: package 'dplyr' was built under R version 4.5.1
## Warning: package 'forcats' was built under R version 4.5.1
## Warning: package 'lubridate' was built under R version 4.5.1
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.2
## ✔ ggplot2 3.5.2 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::recode() masks car::recode()
## ✖ purrr::some() masks car::some()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Fungsi untuk visualisasi hasil
visualisasi_hasil <- function(data, respon, perlakuan, judul) {
library(ggplot2)
# Boxplot
p1 <- ggplot(data, aes(x = {{perlakuan}}, y = {{respon}})) +
geom_boxplot(fill = "lightblue") +
geom_point(position = position_jitter(0.2), alpha = 0.6) +
labs(title = paste("Boxplot", judul),
x = "Perlakuan", y = "Respon") +
theme_minimal()
# Bar plot dengan standar error
summary_data <- data %>%
group_by({{perlakuan}}) %>%
summarise(mean = mean({{respon}}),
se = sd({{respon}})/sqrt(n()))
p2 <- ggplot(summary_data, aes(x = {{perlakuan}}, y = mean)) +
geom_col(fill = "steelblue", alpha = 0.7) +
geom_errorbar(aes(ymin = mean - se, ymax = mean + se), width = 0.2) +
labs(title = paste("Rata-rata dengan SE", judul),
x = "Perlakuan", y = "Rata-rata Respon") +
theme_minimal()
print(p1)
print(p2)
}
visualisasi_hasil(data_ral, TPC, Kemasan, "RAL - Masa Simpan Ikan Nila")Penelitian pengaruh 4 jenis treatment anti-browning (P, Q, R, S) terhadap warna fillet ikan kakap selama penyimpanan. Parameter diukur adalah nilai L* (lightness) setelah 5 hari. Percobaan dilakukan dalam 5 blok (hari berbeda) untuk mengontrol variasi batch ikan.
# Data untuk RAK
set.seed(456)
data_rak <- data.frame(
Treatment = rep(c("P", "Q", "R", "S"), each = 5),
Blok = rep(1:5, 4),
Lightness = c(
# Treatment P: 45, 46, 44, 47, 45
rnorm(5, mean = 45.5, sd = 1.0),
# Treatment Q: 52, 51, 53, 50, 52
rnorm(5, mean = 51.5, sd = 1.0),
# Treatment R: 48, 47, 49, 46, 48
rnorm(5, mean = 47.5, sd = 1.0),
# Treatment S: 55, 54, 56, 53, 55
rnorm(5, mean = 54.5, sd = 1.0)
)
)
# Konversi ke faktor
data_rak$Treatment <- as.factor(data_rak$Treatment)
data_rak$Blok <- as.factor(data_rak$Blok)
data_rak# Analisis ANOVA dengan blok
anova_rak <- aov(Lightness ~ Treatment + Blok, data = data_rak)
summary(anova_rak)## Df Sum Sq Mean Sq F value Pr(>F)
## Treatment 3 346.5 115.50 131.147 1.95e-09 ***
## Blok 4 4.8 1.20 1.367 0.302
## Residuals 12 10.6 0.88
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Shapiro-Wilk normality test
##
## data: residuals(anova_rak)
## W = 0.93909, p-value = 0.2305
## $statistics
## MSerror Df Mean CV t.value LSD
## 0.8806661 12 50.23302 1.86817 2.178813 1.29317
##
## $parameters
## test p.ajusted name.t ntr alpha
## Fisher-LSD none Treatment 4 0.05
##
## $means
## Lightness std r se LCL UCL Min Max Q25
## P 45.09518 1.0551031 5 0.4196823 44.18077 46.00959 44.11111 46.30087 44.15648
## Q 51.93954 0.5055053 5 0.4196823 51.02513 52.85395 51.17594 52.50735 51.75055
## R 47.81943 1.3996871 5 0.4196823 46.90502 48.73384 46.05919 49.15393 46.58419
## S 56.07794 0.7199784 5 0.4196823 55.16353 56.99235 54.88748 56.78003 56.03788
## Q50 Q75
## P 44.78564 46.12178
## Q 52.07323 52.19064
## R 48.48873 48.81110
## S 56.23694 56.44736
##
## $comparison
## NULL
##
## $groups
## Lightness groups
## S 56.07794 a
## Q 51.93954 b
## R 47.81943 c
## P 45.09518 d
##
## attr(,"class")
## [1] "group"
## $statistics
## MSerror Df Mean CV MSD
## 0.8806661 12 50.23302 1.86817 1.762103
##
## $parameters
## test name.t ntr StudentizedRange alpha
## Tukey Treatment 4 4.19866 0.05
##
## $means
## Lightness std r se Min Max Q25 Q50 Q75
## P 45.09518 1.0551031 5 0.4196823 44.11111 46.30087 44.15648 44.78564 46.12178
## Q 51.93954 0.5055053 5 0.4196823 51.17594 52.50735 51.75055 52.07323 52.19064
## R 47.81943 1.3996871 5 0.4196823 46.05919 49.15393 46.58419 48.48873 48.81110
## S 56.07794 0.7199784 5 0.4196823 54.88748 56.78003 56.03788 56.23694 56.44736
##
## $comparison
## NULL
##
## $groups
## Lightness groups
## S 56.07794 a
## Q 51.93954 b
## R 47.81943 c
## P 45.09518 d
##
## attr(,"class")
## [1] "group"
# Uji Duncan untuk RAK
duncan_rak <- duncan.test(anova_rak, "Treatment", alpha = 0.05)
print(duncan_rak)## $statistics
## MSerror Df Mean CV
## 0.8806661 12 50.23302 1.86817
##
## $parameters
## test name.t ntr alpha
## Duncan Treatment 4 0.05
##
## $duncan
## Table CriticalRange
## 2 3.081307 1.293170
## 3 3.225244 1.353578
## 4 3.312453 1.390178
##
## $means
## Lightness std r se Min Max Q25 Q50 Q75
## P 45.09518 1.0551031 5 0.4196823 44.11111 46.30087 44.15648 44.78564 46.12178
## Q 51.93954 0.5055053 5 0.4196823 51.17594 52.50735 51.75055 52.07323 52.19064
## R 47.81943 1.3996871 5 0.4196823 46.05919 49.15393 46.58419 48.48873 48.81110
## S 56.07794 0.7199784 5 0.4196823 54.88748 56.78003 56.03788 56.23694 56.44736
##
## $comparison
## NULL
##
## $groups
## Lightness groups
## S 56.07794 a
## Q 51.93954 b
## R 47.81943 c
## P 45.09518 d
##
## attr(,"class")
## [1] "group"
# Kontras Polinomial Ortogonal
contrasts(data_rak$Treatment) <- contr.poly(4)
anova_rak_poly <- aov(Lightness ~ Treatment + Blok, data = data_rak)
summary(anova_rak_poly, split = list(Treatment = list(linear = 1, quadratic = 2, cubic = 3)))## Df Sum Sq Mean Sq F value Pr(>F)
## Treatment 3 346.5 115.50 131.147 1.95e-09 ***
## Treatment: linear 1 207.8 207.77 235.919 2.96e-09 ***
## Treatment: quadratic 1 2.5 2.50 2.838 0.118
## Treatment: cubic 1 136.2 136.23 154.684 3.24e-08 ***
## Blok 4 4.8 1.20 1.367 0.302
## Residuals 12 10.6 0.88
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Penelitian pengaruh 4 suhu penyimpanan berbeda (10°C, 15°C, 20°C, 25°C) terhadap TVB (Total Volatile Base) fillet ikan bandeng. Dikontrol dua arah: batch ikan (baris) dan waktu pengukuran (kolom).
# Data untuk RBSL
set.seed(789)
data_rbsl <- data.frame(
Suhu = c("10C", "20C", "15C", "25C",
"15C", "10C", "25C", "20C",
"25C", "15C", "20C", "10C",
"20C", "25C", "10C", "15C"),
Baris = rep(1:4, each = 4),
Kolom = rep(1:4, 4),
TVB = c(
# Data TVB (mgN/100g) untuk setiap kombinasi
12.5, 18.3, 15.2, 22.1,
14.8, 11.9, 21.5, 17.6,
20.8, 16.1, 19.2, 13.4,
18.9, 23.7, 14.1, 16.9
)
)
# Konversi ke faktor
data_rbsl$Suhu <- as.factor(data_rbsl$Suhu)
data_rbsl$Baris <- as.factor(data_rbsl$Baris)
data_rbsl$Kolom <- as.factor(data_rbsl$Kolom)
data_rbsl# Analisis ANOVA RBSL
anova_rbsl <- aov(TVB ~ Suhu + Baris + Kolom, data = data_rbsl)
summary(anova_rbsl)## Df Sum Sq Mean Sq F value Pr(>F)
## Suhu 3 179.49 59.83 196.704 2.22e-06 ***
## Baris 3 8.05 2.68 8.825 0.0128 *
## Kolom 3 1.69 0.56 1.849 0.2389
## Residuals 6 1.83 0.30
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Shapiro-Wilk normality test
##
## data: residuals(anova_rbsl)
## W = 0.95219, p-value = 0.5252
## $statistics
## MSerror Df Mean CV t.value LSD
## 0.3041667 6 17.3125 3.185635 2.446912 0.9542433
##
## $parameters
## test p.ajusted name.t ntr alpha
## Fisher-LSD none Suhu 4 0.05
##
## $means
## TVB std r se LCL UCL Min Max Q25 Q50
## 10C 12.975 0.9708244 4 0.2757565 12.30025 13.64975 11.9 14.1 12.350 12.95
## 15C 15.750 0.9398581 4 0.2757565 15.07525 16.42475 14.8 16.9 15.100 15.65
## 20C 18.500 0.7071068 4 0.2757565 17.82525 19.17475 17.6 19.2 18.125 18.60
## 25C 22.025 1.2365948 4 0.2757565 21.35025 22.69975 20.8 23.7 21.325 21.80
## Q75
## 10C 13.575
## 15C 16.300
## 20C 18.975
## 25C 22.500
##
## $comparison
## NULL
##
## $groups
## TVB groups
## 25C 22.025 a
## 20C 18.500 b
## 15C 15.750 c
## 10C 12.975 d
##
## attr(,"class")
## [1] "group"
## $statistics
## MSerror Df Mean CV MSD
## 0.3041667 6 17.3125 3.185635 1.349993
##
## $parameters
## test name.t ntr StudentizedRange alpha
## Tukey Suhu 4 4.895599 0.05
##
## $means
## TVB std r se Min Max Q25 Q50 Q75
## 10C 12.975 0.9708244 4 0.2757565 11.9 14.1 12.350 12.95 13.575
## 15C 15.750 0.9398581 4 0.2757565 14.8 16.9 15.100 15.65 16.300
## 20C 18.500 0.7071068 4 0.2757565 17.6 19.2 18.125 18.60 18.975
## 25C 22.025 1.2365948 4 0.2757565 20.8 23.7 21.325 21.80 22.500
##
## $comparison
## NULL
##
## $groups
## TVB groups
## 25C 22.025 a
## 20C 18.500 b
## 15C 15.750 c
## 10C 12.975 d
##
## attr(,"class")
## [1] "group"
# Uji Duncan untuk RBSL
duncan_rbsl <- duncan.test(anova_rbsl, "Suhu", alpha = 0.05)
print(duncan_rbsl)## $statistics
## MSerror Df Mean CV
## 0.3041667 6 17.3125 3.185635
##
## $parameters
## test name.t ntr alpha
## Duncan Suhu 4 0.05
##
## $duncan
## Table CriticalRange
## 2 3.460456 0.9542433
## 3 3.586498 0.9890002
## 4 3.648934 1.0062174
##
## $means
## TVB std r se Min Max Q25 Q50 Q75
## 10C 12.975 0.9708244 4 0.2757565 11.9 14.1 12.350 12.95 13.575
## 15C 15.750 0.9398581 4 0.2757565 14.8 16.9 15.100 15.65 16.300
## 20C 18.500 0.7071068 4 0.2757565 17.6 19.2 18.125 18.60 18.975
## 25C 22.025 1.2365948 4 0.2757565 20.8 23.7 21.325 21.80 22.500
##
## $comparison
## NULL
##
## $groups
## TVB groups
## 25C 22.025 a
## 20C 18.500 b
## 15C 15.750 c
## 10C 12.975 d
##
## attr(,"class")
## [1] "group"
# Kontras Polinomial Ortogonal (suhu sebagai faktor kuantitatif)
data_rbsl$Suhu_num <- as.numeric(gsub("C", "", data_rbsl$Suhu))
contrasts(data_rbsl$Suhu) <- contr.poly(4)
anova_rbsl_poly <- aov(TVB ~ Suhu + Baris + Kolom, data = data_rbsl)
summary(anova_rbsl_poly, split = list(Suhu = list(linear = 1, quadratic = 2, cubic = 3)))## Df Sum Sq Mean Sq F value Pr(>F)
## Suhu 3 179.49 59.83 196.704 2.22e-06 ***
## Suhu: linear 1 178.80 178.80 587.842 3.24e-07 ***
## Suhu: quadratic 1 0.56 0.56 1.849 0.2227
## Suhu: cubic 1 0.13 0.13 0.421 0.5405
## Baris 3 8.05 2.68 8.825 0.0128 *
## Kolom 3 1.69 0.56 1.849 0.2389
## Residuals 6 1.83 0.30
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Penelitian pengaruh kombinasi suhu penyimpanan (4°C, 10°C) dan jenis kemasan (Vakum, MAP, Styrofoam) terhadap pH fillet ikan nila setelah 7 hari penyimpanan.Data Percobaan
# Data untuk RAL Faktorial
set.seed(123)
data_ral_2faktor <- data.frame(
Suhu = rep(rep(c("4C", "10C"), each = 3), 5),
Kemasan = rep(rep(c("Vakum", "MAP", "Styrofoam"), 2), 5),
pH = c(
# Suhu 4°C
rnorm(5, mean = 6.2, sd = 0.1), # Vakum
rnorm(5, mean = 6.4, sd = 0.1), # MAP
rnorm(5, mean = 6.8, sd = 0.1), # Styrofoam
# Suhu 10°C
rnorm(5, mean = 6.6, sd = 0.1), # Vakum
rnorm(5, mean = 6.9, sd = 0.1), # MAP
rnorm(5, mean = 7.4, sd = 0.1) # Styrofoam
)
)
# Konversi ke faktor
data_ral_2faktor$Suhu <- as.factor(data_ral_2faktor$Suhu)
data_ral_2faktor$Kemasan <- as.factor(data_ral_2faktor$Kemasan)
data_ral_2faktor# Analisis ANOVA dengan interaksi
anova_ral_2faktor <- aov(pH ~ Suhu * Kemasan, data = data_ral_2faktor)
summary(anova_ral_2faktor)## Df Sum Sq Mean Sq F value Pr(>F)
## Suhu 1 0.130 0.12999 0.742 0.398
## Kemasan 2 0.091 0.04537 0.259 0.774
## Suhu:Kemasan 2 0.007 0.00351 0.020 0.980
## Residuals 24 4.206 0.17526
##
## Shapiro-Wilk normality test
##
## data: residuals(anova_ral_2faktor)
## W = 0.93531, p-value = 0.06803
## Warning: package 'emmeans' was built under R version 4.5.1
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
# Simple effects analysis
simple_effects <- emmeans(anova_ral_2faktor, ~ Kemasan | Suhu)
pairs(simple_effects, adjust = "tukey")## Suhu = 10C:
## contrast estimate SE df t.ratio p.value
## MAP - Styrofoam -0.0589 0.265 24 -0.223 0.9731
## MAP - Vakum 0.0468 0.265 24 0.177 0.9829
## Styrofoam - Vakum 0.1057 0.265 24 0.399 0.9162
##
## Suhu = 4C:
## contrast estimate SE df t.ratio p.value
## MAP - Styrofoam -0.1326 0.265 24 -0.501 0.8716
## MAP - Vakum 0.0216 0.265 24 0.081 0.9963
## Styrofoam - Vakum 0.1542 0.265 24 0.582 0.8308
##
## P value adjustment: tukey method for comparing a family of 3 estimates
# Atau menggunakan LSD untuk setiap level suhu
# Untuk Suhu 4°C
data_4C <- subset(data_ral_2faktor, Suhu == "4C")
anova_4C <- aov(pH ~ Kemasan, data = data_4C)
lsd_4C <- LSD.test(anova_4C, "Kemasan", alpha = 0.05)
print(lsd_4C)## $statistics
## MSerror Df Mean CV t.value LSD
## 0.1625811 12 6.64613 6.066891 2.178813 0.555629
##
## $parameters
## test p.ajusted name.t ntr alpha
## Fisher-LSD none Kemasan 3 0.05
##
## $means
## pH std r se LCL UCL Min Max
## MAP 6.609119 0.4273459 5 0.1803225 6.216230 7.002008 6.176982 7.231331
## Styrofoam 6.741720 0.4665358 5 0.1803225 6.348830 7.134609 6.331315 7.483779
## Vakum 6.587551 0.2957417 5 0.1803225 6.194662 6.980440 6.143952 6.840077
## Q25 Q50 Q75
## MAP 6.273494 6.552721 6.811068
## Styrofoam 6.355871 6.744416 6.793218
## Vakum 6.446092 6.670136 6.837496
##
## $comparison
## NULL
##
## $groups
## pH groups
## Styrofoam 6.741720 a
## MAP 6.609119 a
## Vakum 6.587551 a
##
## attr(,"class")
## [1] "group"
# Untuk Suhu 10°C
data_10C <- subset(data_ral_2faktor, Suhu == "10C")
anova_10C <- aov(pH ~ Kemasan, data = data_10C)
lsd_10C <- LSD.test(anova_10C, "Kemasan", alpha = 0.05)
print(lsd_10C)## $statistics
## MSerror Df Mean CV t.value LSD
## 0.1879426 12 6.777783 6.396244 2.178813 0.5973963
##
## $parameters
## test p.ajusted name.t ntr alpha
## Fisher-LSD none Kemasan 3 0.05
##
## $means
## pH std r se LCL UCL Min Max
## MAP 6.773742 0.3921534 5 0.1938776 6.351319 7.196165 6.212929 7.286186
## Styrofoam 6.832664 0.4279086 5 0.1938776 6.410241 7.255087 6.403338 7.525381
## Vakum 6.726943 0.4763798 5 0.1938776 6.304520 7.149366 6.207051 7.415337
## Q25 Q50 Q75
## MAP 6.649785 6.797400 6.922408
## Styrofoam 6.571506 6.827111 6.835981
## Vakum 6.355434 6.778691 6.878203
##
## $comparison
## NULL
##
## $groups
## pH groups
## Styrofoam 6.832664 a
## MAP 6.773742 a
## Vakum 6.726943 a
##
## attr(,"class")
## [1] "group"
# Uji Tukey untuk interaksi
interaction_means <- emmeans(anova_ral_2faktor, ~ Suhu:Kemasan)
tukey_interaction <- pairs(interaction_means, adjust = "tukey")
print(tukey_interaction)## contrast estimate SE df t.ratio p.value
## 10C MAP - 4C MAP 0.1646 0.265 24 0.622 0.9883
## 10C MAP - 10C Styrofoam -0.0589 0.265 24 -0.223 0.9999
## 10C MAP - 4C Styrofoam 0.0320 0.265 24 0.121 1.0000
## 10C MAP - 10C Vakum 0.0468 0.265 24 0.177 1.0000
## 10C MAP - 4C Vakum 0.1862 0.265 24 0.703 0.9797
## 4C MAP - 10C Styrofoam -0.2235 0.265 24 -0.844 0.9559
## 4C MAP - 4C Styrofoam -0.1326 0.265 24 -0.501 0.9957
## 4C MAP - 10C Vakum -0.1178 0.265 24 -0.445 0.9975
## 4C MAP - 4C Vakum 0.0216 0.265 24 0.081 1.0000
## 10C Styrofoam - 4C Styrofoam 0.0909 0.265 24 0.343 0.9993
## 10C Styrofoam - 10C Vakum 0.1057 0.265 24 0.399 0.9985
## 10C Styrofoam - 4C Vakum 0.2451 0.265 24 0.926 0.9359
## 4C Styrofoam - 10C Vakum 0.0148 0.265 24 0.056 1.0000
## 4C Styrofoam - 4C Vakum 0.1542 0.265 24 0.582 0.9913
## 10C Vakum - 4C Vakum 0.1394 0.265 24 0.526 0.9945
##
## P value adjustment: tukey method for comparing a family of 6 estimates
# Fungsi visualisasi interaksi
visualisasi_interaksi <- function(data, respon, faktor1, faktor2, judul) {
library(ggplot2)
library(dplyr)
# Interaction plot
interaction_data <- data %>%
group_by({{faktor1}}, {{faktor2}}) %>%
summarise(mean_respon = mean({{respon}}),
se = sd({{respon}})/sqrt(n()))
p1 <- ggplot(interaction_data,
aes(x = {{faktor1}}, y = mean_respon,
color = {{faktor2}}, group = {{faktor2}})) +
geom_line(size = 1) +
geom_point(size = 2) +
geom_errorbar(aes(ymin = mean_respon - se, ymax = mean_respon + se),
width = 0.1) +
labs(title = paste("Plot Interaksi", judul),
x = deparse(substitute(faktor1)),
y = "Rata-rata Respon",
color = deparse(substitute(faktor2))) +
theme_minimal()
# Heatmap interaksi
p2 <- ggplot(interaction_data,
aes(x = {{faktor1}}, y = {{faktor2}}, fill = mean_respon)) +
geom_tile() +
scale_fill_gradient(low = "blue", high = "red") +
labs(title = paste("Heatmap Interaksi", judul),
x = deparse(substitute(faktor1)),
y = deparse(substitute(faktor2)),
fill = "Rata-rata") +
theme_minimal()
print(p1)
print(p2)
}
visualisasi_interaksi(data_ral_2faktor, pH, Suhu, Kemasan, "RAL - pH Ikan Nila")## `summarise()` has grouped output by 'Suhu'. You can override using the
## `.groups` argument.
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Pengaruh konsentrasi garam (5%, 10%, 15%) dan jenis ikan (Nila, Patin, Lele) terhadap kadar air produk ikan asin. Percobaan dilakukan dalam 4 blok (batch pembuatan berbeda).
# Data untuk RAK Faktorial
set.seed(456)
data_rak_2faktor <- data.frame(
Blok = rep(1:4, each = 9),
Garam = rep(rep(c("5%", "10%", "15%"), each = 3), 4),
Jenis_Ikan = rep(c("Nila", "Patin", "Lele"), 12),
Kadar_Air = c(
# Blok 1
rnorm(3, mean = 45, sd = 1.5), # 5% - Nila, Patin, Lele
rnorm(3, mean = 40, sd = 1.5), # 10% - Nila, Patin, Lele
rnorm(3, mean = 35, sd = 1.5), # 15% - Nila, Patin, Lele
# Blok 2
rnorm(3, mean = 46, sd = 1.5),
rnorm(3, mean = 41, sd = 1.5),
rnorm(3, mean = 36, sd = 1.5),
# Blok 3
rnorm(3, mean = 44, sd = 1.5),
rnorm(3, mean = 39, sd = 1.5),
rnorm(3, mean = 34, sd = 1.5),
# Blok 4
rnorm(3, mean = 45, sd = 1.5),
rnorm(3, mean = 40, sd = 1.5),
rnorm(3, mean = 35, sd = 1.5)
)
)
# Konversi ke faktor
data_rak_2faktor$Blok <- as.factor(data_rak_2faktor$Blok)
data_rak_2faktor$Garam <- as.factor(data_rak_2faktor$Garam)
data_rak_2faktor$Jenis_Ikan <- as.factor(data_rak_2faktor$Jenis_Ikan)
data_rak_2faktor# Analisis ANOVA dengan blok dan interaksi
anova_rak_2faktor <- aov(Kadar_Air ~ Garam * Jenis_Ikan + Blok, data = data_rak_2faktor)
summary(anova_rak_2faktor)## Df Sum Sq Mean Sq F value Pr(>F)
## Garam 2 559.1 279.55 96.992 3.17e-12 ***
## Jenis_Ikan 2 2.6 1.32 0.458 0.63825
## Blok 3 41.5 13.82 4.795 0.00934 **
## Garam:Jenis_Ikan 4 0.6 0.16 0.055 0.99406
## Residuals 24 69.2 2.88
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Shapiro-Wilk normality test
##
## data: residuals(anova_rak_2faktor)
## W = 0.98519, p-value = 0.9013
# Analisis simple effects menggunakan emmeans
library(emmeans)
# Simple effects untuk setiap level garam
simple_garam <- emmeans(anova_rak_2faktor, ~ Jenis_Ikan | Garam)
tukey_garam <- pairs(simple_garam, adjust = "tukey")
print(tukey_garam)## Garam = 10%:
## contrast estimate SE df t.ratio p.value
## Lele - Nila -0.3410 1.2 24 -0.284 0.9566
## Lele - Patin -0.9279 1.2 24 -0.773 0.7228
## Nila - Patin -0.5870 1.2 24 -0.489 0.8772
##
## Garam = 15%:
## contrast estimate SE df t.ratio p.value
## Lele - Nila -0.0565 1.2 24 -0.047 0.9988
## Lele - Patin -0.2043 1.2 24 -0.170 0.9842
## Nila - Patin -0.1478 1.2 24 -0.123 0.9917
##
## Garam = 5%:
## contrast estimate SE df t.ratio p.value
## Lele - Nila -0.2375 1.2 24 -0.198 0.9787
## Lele - Patin -0.8176 1.2 24 -0.681 0.7766
## Nila - Patin -0.5801 1.2 24 -0.483 0.8798
##
## Results are averaged over the levels of: Blok
## P value adjustment: tukey method for comparing a family of 3 estimates
# Simple effects untuk setiap jenis ikan
simple_ikan <- emmeans(anova_rak_2faktor, ~ Garam | Jenis_Ikan)
tukey_ikan <- pairs(simple_ikan, adjust = "tukey")
print(tukey_ikan)## Jenis_Ikan = Lele:
## contrast estimate SE df t.ratio p.value
## 10% - 15% 2.64 1.2 24 2.196 0.0923
## 10% - 5% -6.54 1.2 24 -5.447 <.0001
## 15% - 5% -9.18 1.2 24 -7.643 <.0001
##
## Jenis_Ikan = Nila:
## contrast estimate SE df t.ratio p.value
## 10% - 15% 2.92 1.2 24 2.433 0.0572
## 10% - 5% -6.44 1.2 24 -5.361 <.0001
## 15% - 5% -9.36 1.2 24 -7.794 <.0001
##
## Jenis_Ikan = Patin:
## contrast estimate SE df t.ratio p.value
## 10% - 15% 3.36 1.2 24 2.799 0.0260
## 10% - 5% -6.43 1.2 24 -5.355 <.0001
## 15% - 5% -9.79 1.2 24 -8.154 <.0001
##
## Results are averaged over the levels of: Blok
## P value adjustment: tukey method for comparing a family of 3 estimates
# Uji LSD manual untuk interaksi signifikan
# Untuk Garam 5%
data_5p <- subset(data_rak_2faktor, Garam == "5%")
anova_5p <- aov(Kadar_Air ~ Jenis_Ikan + Blok, data = data_5p)
lsd_5p <- LSD.test(anova_5p, "Jenis_Ikan", alpha = 0.05)
print(lsd_5p)## $statistics
## MSerror Df Mean CV t.value LSD
## 4.625794 6 45.55722 4.721021 2.446912 3.721315
##
## $parameters
## test p.ajusted name.t ntr alpha
## Fisher-LSD none Jenis_Ikan 3 0.05
##
## $means
## Kadar_Air std r se LCL UCL Min Max
## Lele 45.20550 2.285900 4 1.075383 42.57413 47.83686 43.28809 47.96665
## Nila 45.44301 2.068385 4 1.075383 42.81164 48.07438 42.98472 47.42005
## Patin 46.02315 1.078377 4 1.075383 43.39178 48.65451 44.62628 47.22681
## Q25 Q50 Q75
## Lele 43.34647 44.78362 46.64265
## Nila 44.12675 45.68364 46.99990
## Patin 45.60607 46.11974 46.53682
##
## $comparison
## NULL
##
## $groups
## Kadar_Air groups
## Patin 46.02315 a
## Nila 45.44301 a
## Lele 45.20550 a
##
## attr(,"class")
## [1] "group"
# Uji Duncan untuk interaksi
duncan_interaction <- duncan.test(anova_rak_2faktor,
c("Garam", "Jenis_Ikan"),
alpha = 0.05)
print(duncan_interaction)## $statistics
## MSerror Df Mean CV
## 2.882218 24 40.25472 4.217418
##
## $parameters
## test name.t ntr alpha
## Duncan Garam:Jenis_Ikan 9 0.05
##
## $duncan
## Table CriticalRange
## 2 2.918793 2.477632
## 3 3.065610 2.602258
## 4 3.159874 2.682274
## 5 3.226454 2.738792
## 6 3.276155 2.780980
## 7 3.314602 2.813616
## 8 3.345082 2.839489
## 9 3.369669 2.860360
##
## $means
## Kadar_Air std r se Min Max Q25 Q50
## 10%:Lele 38.66667 1.145530 4 0.8488549 37.00163 39.51391 38.37950 39.07557
## 10%:Nila 39.00765 2.580934 4 0.8488549 36.42404 42.48309 37.54351 38.56174
## 10%:Patin 39.59461 2.784594 4 0.8488549 36.85975 43.48089 38.41129 39.01889
## 15%:Lele 36.03036 1.899546 4 0.8488549 33.30572 37.72348 35.70970 36.54613
## 15%:Nila 36.08687 2.084094 4 0.8488549 33.94625 38.92103 35.06973 35.74010
## 15%:Patin 36.23465 1.591673 4 0.8488549 35.25594 38.60540 35.34585 35.53862
## 5%:Lele 45.20550 2.285900 4 0.8488549 43.28809 47.96665 43.34647 44.78362
## 5%:Nila 45.44301 2.068385 4 0.8488549 42.98472 47.42005 44.12675 45.68364
## 5%:Patin 46.02315 1.078377 4 0.8488549 44.62628 47.22681 45.60607 46.11974
## Q75
## 10%:Lele 39.36274
## 10%:Nila 40.02588
## 10%:Patin 40.20221
## 15%:Lele 36.86679
## 15%:Nila 36.75723
## 15%:Patin 36.42742
## 5%:Lele 46.64265
## 5%:Nila 46.99990
## 5%:Patin 46.53682
##
## $comparison
## NULL
##
## $groups
## Kadar_Air groups
## 5%:Patin 46.02315 a
## 5%:Nila 45.44301 a
## 5%:Lele 45.20550 a
## 10%:Patin 39.59461 b
## 10%:Nila 39.00765 b
## 10%:Lele 38.66667 bc
## 15%:Patin 36.23465 c
## 15%:Nila 36.08687 c
## 15%:Lele 36.03036 c
##
## attr(,"class")
## [1] "group"
## `summarise()` has grouped output by 'Garam'. You can override using the
## `.groups` argument.
Pengaruh waktu penyimpanan (1, 2, 3, 4 minggu) dan metode pengawetan (Fresh, Ice, Chiller, Frozen) terhadap TPC (Total Plate Count) fillet ikan kembung. Dikontrol dua arah: batch ikan (baris) dan laboratorium penguji (kolom).
# Data untuk RBSL Faktorial
set.seed(789)
data_rbsl_2faktor <- data.frame(
Baris = rep(1:4, each = 16),
Kolom = rep(1:4, 16),
Waktu = rep(rep(c("1mg", "2mg", "3mg", "4mg"), each = 4), 4),
Metode = rep(c("Fresh", "Ice", "Chiller", "Frozen"), 16),
TPC = c(
# Baris 1 - berbagai kombinasi
rnorm(4, mean = 4.5, sd = 0.3), # 1mg - berbagai metode
rnorm(4, mean = 5.2, sd = 0.3), # 2mg
rnorm(4, mean = 6.1, sd = 0.3), # 3mg
rnorm(4, mean = 7.3, sd = 0.3), # 4mg
# Baris 2
rnorm(4, mean = 3.8, sd = 0.3),
rnorm(4, mean = 4.5, sd = 0.3),
rnorm(4, mean = 5.8, sd = 0.3),
rnorm(4, mean = 7.1, sd = 0.3),
# Baris 3
rnorm(4, mean = 4.2, sd = 0.3),
rnorm(4, mean = 5.0, sd = 0.3),
rnorm(4, mean = 6.2, sd = 0.3),
rnorm(4, mean = 7.5, sd = 0.3),
# Baris 4
rnorm(4, mean = 4.0, sd = 0.3),
rnorm(4, mean = 4.8, sd = 0.3),
rnorm(4, mean = 6.0, sd = 0.3),
rnorm(4, mean = 7.2, sd = 0.3)
)
)
# Konversi ke faktor
data_rbsl_2faktor$Baris <- as.factor(data_rbsl_2faktor$Baris)
data_rbsl_2faktor$Kolom <- as.factor(data_rbsl_2faktor$Kolom)
data_rbsl_2faktor$Waktu <- as.factor(data_rbsl_2faktor$Waktu)
data_rbsl_2faktor$Metode <- as.factor(data_rbsl_2faktor$Metode)# Analisis ANOVA RBSL dengan interaksi
anova_rbsl_2faktor <- aov(TPC ~ Waktu * Metode + Baris + Kolom, data = data_rbsl_2faktor)
summary(anova_rbsl_2faktor)## Df Sum Sq Mean Sq F value Pr(>F)
## Waktu 3 95.95 31.98 354.002 < 2e-16 ***
## Metode 3 0.09 0.03 0.324 0.808
## Baris 3 2.69 0.90 9.919 3.88e-05 ***
## Waktu:Metode 9 0.90 0.10 1.112 0.374
## Residuals 45 4.07 0.09
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Shapiro-Wilk normality test
##
## data: residuals(anova_rbsl_2faktor)
## W = 0.99065, p-value = 0.912
# Analisis interaksi menggunakan emmeans
library(emmeans)
# Simple effects analysis
simple_waktu <- emmeans(anova_rbsl_2faktor, ~ Metode | Waktu)## NOTE: A nesting structure was detected in the fitted model:
## Metode %in% Kolom
## Waktu = 1mg:
## contrast estimate SE df t.ratio p.value
## Fresh Kolom1 - Ice Kolom2 0.2627 0.213 45 1.236 0.9998
## Fresh Kolom1 - Chiller Kolom3 0.2082 0.213 45 0.980 1.0000
## Fresh Kolom1 - Frozen Kolom4 0.4016 0.213 45 1.889 0.9581
## Ice Kolom2 - Chiller Kolom3 -0.0545 0.213 45 -0.256 1.0000
## Ice Kolom2 - Frozen Kolom4 0.1389 0.213 45 0.653 1.0000
## Chiller Kolom3 - Frozen Kolom4 0.1934 0.213 45 0.910 1.0000
##
## Waktu = 2mg:
## contrast estimate SE df t.ratio p.value
## Fresh Kolom1 - Ice Kolom2 -0.1078 0.213 45 -0.507 1.0000
## Fresh Kolom1 - Chiller Kolom3 0.0934 0.213 45 0.440 1.0000
## Fresh Kolom1 - Frozen Kolom4 -0.2288 0.213 45 -1.077 1.0000
## Ice Kolom2 - Chiller Kolom3 0.2012 0.213 45 0.946 1.0000
## Ice Kolom2 - Frozen Kolom4 -0.1211 0.213 45 -0.570 1.0000
## Chiller Kolom3 - Frozen Kolom4 -0.3222 0.213 45 -1.516 0.9965
##
## Waktu = 3mg:
## contrast estimate SE df t.ratio p.value
## Fresh Kolom1 - Ice Kolom2 -0.2097 0.213 45 -0.987 1.0000
## Fresh Kolom1 - Chiller Kolom3 -0.2714 0.213 45 -1.277 0.9997
## Fresh Kolom1 - Frozen Kolom4 -0.1768 0.213 45 -0.832 1.0000
## Ice Kolom2 - Chiller Kolom3 -0.0617 0.213 45 -0.290 1.0000
## Ice Kolom2 - Frozen Kolom4 0.0329 0.213 45 0.155 1.0000
## Chiller Kolom3 - Frozen Kolom4 0.0946 0.213 45 0.445 1.0000
##
## Waktu = 4mg:
## contrast estimate SE df t.ratio p.value
## Fresh Kolom1 - Ice Kolom2 0.0774 0.213 45 0.364 1.0000
## Fresh Kolom1 - Chiller Kolom3 0.3333 0.213 45 1.568 0.9947
## Fresh Kolom1 - Frozen Kolom4 0.0531 0.213 45 0.250 1.0000
## Ice Kolom2 - Chiller Kolom3 0.2559 0.213 45 1.204 0.9999
## Ice Kolom2 - Frozen Kolom4 -0.0243 0.213 45 -0.114 1.0000
## Chiller Kolom3 - Frozen Kolom4 -0.2802 0.213 45 -1.318 0.9995
##
## Results are averaged over some or all of the levels of: Baris
## P value adjustment: tukey method for comparing a family of 24 estimates
## NOTE: A nesting structure was detected in the fitted model:
## Metode %in% Kolom
## Kolom = 3, Metode = Chiller:
## contrast estimate SE df t.ratio p.value
## 1mg - 2mg -0.582 0.213 45 -2.739 0.5043
## 1mg - 3mg -2.102 0.213 45 -9.889 <.0001
## 1mg - 4mg -2.983 0.213 45 -14.034 <.0001
## 2mg - 3mg -1.520 0.213 45 -7.150 <.0001
## 2mg - 4mg -2.401 0.213 45 -11.295 <.0001
## 3mg - 4mg -0.881 0.213 45 -4.145 0.0239
##
## Kolom = 1, Metode = Fresh:
## contrast estimate SE df t.ratio p.value
## 1mg - 2mg -0.467 0.213 45 -2.199 0.8502
## 1mg - 3mg -1.622 0.213 45 -7.633 <.0001
## 1mg - 4mg -3.108 0.213 45 -14.623 <.0001
## 2mg - 3mg -1.155 0.213 45 -5.434 0.0005
## 2mg - 4mg -2.641 0.213 45 -12.424 <.0001
## 3mg - 4mg -1.486 0.213 45 -6.990 <.0001
##
## Kolom = 4, Metode = Frozen:
## contrast estimate SE df t.ratio p.value
## 1mg - 2mg -1.098 0.213 45 -5.165 0.0011
## 1mg - 3mg -2.201 0.213 45 -10.354 <.0001
## 1mg - 4mg -3.456 0.213 45 -16.262 <.0001
## 2mg - 3mg -1.103 0.213 45 -5.189 0.0010
## 2mg - 4mg -2.359 0.213 45 -11.097 <.0001
## 3mg - 4mg -1.256 0.213 45 -5.908 0.0001
##
## Kolom = 2, Metode = Ice:
## contrast estimate SE df t.ratio p.value
## 1mg - 2mg -0.838 0.213 45 -3.942 0.0413
## 1mg - 3mg -2.095 0.213 45 -9.855 <.0001
## 1mg - 4mg -3.293 0.213 45 -15.494 <.0001
## 2mg - 3mg -1.257 0.213 45 -5.913 0.0001
## 2mg - 4mg -2.455 0.213 45 -11.552 <.0001
## 3mg - 4mg -1.199 0.213 45 -5.639 0.0002
##
## Results are averaged over some or all of the levels of: Baris
## P value adjustment: tukey method for comparing a family of 24 estimates
# Uji LSD untuk kombinasi spesifik
# Untuk Waktu 1 minggu
data_1mg <- subset(data_rbsl_2faktor, Waktu == "1mg")
anova_1mg <- aov(TPC ~ Metode + Baris + Kolom, data = data_1mg)
lsd_1mg <- LSD.test(anova_1mg, "Metode", alpha = 0.05)
print(lsd_1mg)## $statistics
## MSerror Df Mean CV t.value LSD
## 0.08074926 9 4.070532 6.981007 2.262157 0.4545452
##
## $parameters
## test p.ajusted name.t ntr alpha
## Fisher-LSD none Metode 4 0.05
##
## $means
## TPC std r se LCL UCL Min Max
## Chiller 4.080445 0.2814864 4 0.1420821 3.759033 4.401857 3.862812 4.494096
## Fresh 4.288663 0.3086432 4 0.1420821 3.967251 4.610075 3.926861 4.657229
## Frozen 3.887073 0.4712628 4 0.1420821 3.565661 4.208485 3.544116 4.554942
## Ice 4.025948 0.3644304 4 0.1420821 3.704536 4.347360 3.617911 4.369757
## Q25 Q50 Q75
## Chiller 3.950092 3.982436 4.112789
## Fresh 4.122541 4.285281 4.451403
## Frozen 3.561128 3.724617 4.050561
## Ice 3.770805 4.058061 4.313204
##
## $comparison
## NULL
##
## $groups
## TPC groups
## Fresh 4.288663 a
## Chiller 4.080445 a
## Ice 4.025948 a
## Frozen 3.887073 a
##
## attr(,"class")
## [1] "group"
# Uji Duncan untuk semua kombinasi
duncan_rbsl <- duncan.test(anova_rbsl_2faktor,
c("Waktu", "Metode"),
alpha = 0.05)
print(duncan_rbsl)## $statistics
## MSerror Df Mean CV
## 0.09035187 45 5.560857 5.405387
##
## $parameters
## test name.t ntr alpha
## Duncan Waktu:Metode 16 0.05
##
## $duncan
## Table CriticalRange
## 2 2.848372 0.4280902
## 3 2.995440 0.4501934
## 4 3.091920 0.4646937
## 5 3.161684 0.4751788
## 6 3.215093 0.4832058
## 7 3.257548 0.4895865
## 8 3.292203 0.4947948
## 9 3.321052 0.4991307
## 10 3.345434 0.5027950
## 11 3.366284 0.5059287
## 12 3.384284 0.5086340
## 13 3.399942 0.5109872
## 14 3.413647 0.5130470
## 15 3.425703 0.5148589
## 16 3.436352 0.5164595
##
## $means
## TPC std r se Min Max Q25 Q50
## 1mg:Chiller 4.080445 0.2814864 4 0.1502929 3.862812 4.494096 3.950092 3.982436
## 1mg:Fresh 4.288663 0.3086432 4 0.1502929 3.926861 4.657229 4.122541 4.285281
## 1mg:Frozen 3.887073 0.4712628 4 0.1502929 3.544116 4.554942 3.561128 3.724617
## 1mg:Ice 4.025948 0.3644304 4 0.1502929 3.617911 4.369757 3.770805 4.058061
## 2mg:Chiller 4.662608 0.3268195 4 0.1502929 4.242694 5.000106 4.501711 4.703817
## 2mg:Fresh 4.756025 0.3799379 4 0.1502929 4.289385 5.091595 4.525827 4.821561
## 2mg:Frozen 4.984845 0.2660113 4 0.1502929 4.610328 5.198181 4.889992 5.065436
## 2mg:Ice 4.863777 0.1619686 4 0.1502929 4.705041 5.054655 4.743808 4.847707
## 3mg:Chiller 6.182345 0.4217941 4 0.1502929 5.719567 6.683614 5.914375 6.163099
## 3mg:Fresh 5.910979 0.4218184 4 0.1502929 5.371092 6.325518 5.690307 5.973653
## 3mg:Frozen 6.087756 0.3691661 4 0.1502929 5.740230 6.440960 5.784432 6.084917
## 3mg:Ice 6.120666 0.4986002 4 0.1502929 5.646303 6.727859 5.751522 6.054252
## 4mg:Chiller 7.063282 0.4136482 4 0.1502929 6.573714 7.578372 6.883902 7.050520
## 4mg:Fresh 7.396623 0.3383056 4 0.1502929 7.103263 7.879571 7.210829 7.301828
## 4mg:Frozen 7.343501 0.5231867 4 0.1502929 6.759507 7.904554 6.990631 7.354971
## 4mg:Ice 7.319180 0.2718128 4 0.1502929 7.049963 7.653292 7.127713 7.286731
## Q75
## 1mg:Chiller 4.112789
## 1mg:Fresh 4.451403
## 1mg:Frozen 4.050561
## 1mg:Ice 4.313204
## 2mg:Chiller 4.864714
## 2mg:Fresh 5.051759
## 2mg:Frozen 5.160290
## 2mg:Ice 4.967676
## 3mg:Chiller 6.431068
## 3mg:Fresh 6.194324
## 3mg:Frozen 6.388242
## 3mg:Ice 6.423396
## 4mg:Chiller 7.229899
## 4mg:Fresh 7.487622
## 4mg:Frozen 7.707840
## 4mg:Ice 7.478198
##
## $comparison
## NULL
##
## $groups
## TPC groups
## 4mg:Fresh 7.396623 a
## 4mg:Frozen 7.343501 a
## 4mg:Ice 7.319180 a
## 4mg:Chiller 7.063282 a
## 3mg:Chiller 6.182345 b
## 3mg:Ice 6.120666 b
## 3mg:Frozen 6.087756 b
## 3mg:Fresh 5.910979 b
## 2mg:Frozen 4.984845 c
## 2mg:Ice 4.863777 c
## 2mg:Fresh 4.756025 c
## 2mg:Chiller 4.662608 cd
## 1mg:Fresh 4.288663 de
## 1mg:Chiller 4.080445 e
## 1mg:Ice 4.025948 e
## 1mg:Frozen 3.887073 e
##
## attr(,"class")
## [1] "group"
# Kontras polinomial untuk waktu (faktor kuantitatif)
data_rbsl_2faktor$Waktu_num <- as.numeric(gsub("mg", "", data_rbsl_2faktor$Waktu))
contrasts(data_rbsl_2faktor$Waktu) <- contr.poly(4)
anova_rbsl_poly <- aov(TPC ~ Waktu * Metode + Baris + Kolom, data = data_rbsl_2faktor)
summary(anova_rbsl_poly, split = list(Waktu = list(linear = 1, quadratic = 2, cubic = 3)))## Df Sum Sq Mean Sq F value Pr(>F)
## Waktu 3 95.95 31.98 354.002 < 2e-16 ***
## Waktu: linear 1 94.86 94.86 1049.847 < 2e-16 ***
## Waktu: quadratic 1 0.84 0.84 9.324 0.00379 **
## Waktu: cubic 1 0.26 0.26 2.834 0.09921 .
## Metode 3 0.09 0.03 0.324 0.80820
## Baris 3 2.69 0.90 9.919 3.88e-05 ***
## Waktu:Metode 9 0.90 0.10 1.112 0.37392
## Waktu:Metode: linear 3 0.15 0.05 0.551 0.65012
## Waktu:Metode: quadratic 3 0.44 0.15 1.619 0.19830
## Waktu:Metode: cubic 3 0.32 0.11 1.167 0.33279
## Residuals 45 4.07 0.09
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## `summarise()` has grouped output by 'Waktu'. You can override using the
## `.groups` argument.
Soal 1: Keseragaman Lingkungan
Situasi: Seorang peneliti ingin menguji efektivitas 5 jenis pakan berbeda terhadap pertumbuhan ikan lele. Percobaan dilakukan di dalam ruangan terkontrol dengan sistem akuarium yang identik, dimana semua kondisi lingkungan (suhu air, pH, oksigen terlarut) dapat dipertahankan secara seragam.
Pertanyaan: Rancangan percobaan apa yang paling efisien untuk situasi ini? Mengapa?
Soal 2: Heterogenitas Lahan
Situasi: Penelitian pengaruh 4 dosis probiotik berbeda terhadap kualitas air tambak udang. Percobaan dilakukan di 6 petak tambak yang memiliki karakteristik berbeda (kedalaman, jenis tanah, riwayat penggunaan).
Pertanyaan: Rancangan apa yang tepat untuk mengatasi variasi antar petak tambak? Jelaskan alasan pemilihan rancangan tersebut.
Soal 3: Variasi Dua Arah
Situasi: Studi pengaruh 3 metode pengolahan ikan (segar, beku, asap) terhadap daya terima konsumen. Percobaan perlu mengontrol variasi dari dua sumber: batch bahan baku (3 batch berbeda) dan panelis (3 kelompok panelis dengan karakteristik berbeda).
Pertanyaan: Rancangan percobaan mana yang dapat mengontrol kedua sumber variasi tersebut secara simultan?
Tugas 1: Pemupukan Tambak
Studi Kasus: Seorang pembudidaya ikan ingin menguji efektivitas 3 jenis pupuk organik (Pupuk A, Pupuk B, Pupuk C) untuk meningkatkan produktivitas tambak ikan nila. Percobaan akan dilakukan di 4 lahan tambak yang berbeda.
Tugas:
1. Tentukan jenis rancangan percobaan yang tepat
2. Hitung jumlah satuan percobaan yang dibutuhkan
3. Buat tabel layout rancangan percobaan
4. Jelaskan alasan pemilihan rancangan tersebut
Parameter yang diukur: Produksi biomass ikan (kg/hektar)
Tugas 2: Optimasi Pakan Ikan
Studi Kasus: Penelitian pengaruh kombinasi jenis pakan (Pelet, Cacing, Campuran) dan frekuensi pemberian pakan (2 kali/hari, 3 kali/hari, 4 kali/hari) terhadap pertumbuhan ikan gurame.
Kondisi: Percobaan dilakukan menggunakan 27 unit keramba jaring apung yang ditempatkan di perairan waduk.
Tugas:
1. Identifikasi faktor dan level dalam percobaan
2. Tentukan jenis rancangan percobaan
3. Hitung total satuan percobaan
4. Buat kerangka tabel ANOVA yang diharapkan
5. Susun layout percobaan
Parameter: Laju pertumbuhan harian (gram/hari)
Tugas 3: Pengawetan Filet Ikan
Studi Kasus: Evaluasi pengaruh suhu penyimpanan (4°C, 10°C) dan jenis kemasan (Vakum, MAP, Plastik Biasa) terhadap masa simpan filet ikan kakap.
Kondisi: Percobaan menggunakan 3 batch ikan yang berbeda (tanggal tangkapan berbeda) dan dilakukan pengulangan 4 kali untuk setiap kombinasi perlakuan.
Tugas:
1. Tentukan rancangan yang dapat mengontrol variasi batch
2. Hitung kebutuhan unit percobaan
3. Buat diagram alur percobaan
4. Tentukan variabel respon dan kovariat yang mungkin
5. Susun tabel pengamatan
Parameter: Total Plate Count (log CFU/g) setelah 7 hari penyimpanan
Tugas 4: Interpretasi Hasil
Data Hasil Percobaan: Sebuah penelitian menguji 4 metode pengolahan ikan asin (A, B, C, D) dengan RAL menghasilkan output ANOVA berikut:
Df Sum Sq Mean Sq F value Pr(>F)
Metode 3 145.2 48.40 15.24 2.34e-05 ***
Residuals 20 63.5 3.18
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Rata-rata perlakuan: A = 25.3, B = 30.1, C = 28.4, D = 22.8
Pertanyaan:
1. Apakah terdapat perbedaan yang signifikan antar metode pengolahan?
2. Metode mana yang memberikan hasil terbaik?
3. Uji lanjut apa yang tepat untuk mengetahui perbedaan antar perlakuan?
4. Jika dilakukan uji Tukey, interpretasikan kemungkinan hasilnya