library(grid)
library(agricolae)
## Warning: package 'agricolae' was built under R version 4.3.3
library(stats)  #berisi fungsi analisis statistika umum
library(readxl) #untuk membaca data dari file (.xls dan .xlsx)
library(readr)  #untuk baca data dalam bentuk (.csv)
library(car)    #Analisis lanjutan
## Loading required package: carData
library(tidyr)  #Merapikan Data

UJI LANJUT

UJI TAK TERENCANA
1. LSD
2. Tukey, Duncan, Dunnet

UJI TERENCANA
1. Kontras Orthogonal
2. Polinomial Orthogonal

UJI TAK TERENCANA

Beda Nyata Terkecil (BNT/LSD)

Tujuan BNT untuk menentukan apakah rata-rata dua perlakuan berbeda secara statistik atau tidak.

Formula untuk menentukan nilai kritis BNT

knitr::include_graphics("D:\\AGH 25\\BNT.png")

Catatan: Jika selisih antara 2 rataan > BNT, maka tolak \(H_0\)

Contoh Soal

Berikut data mengenai produksi padi yang dihasilkan oleh 3 varietas padi yaitu IR 32, IR 36 dan VUTW untuk tiap 2000 \(m^3\) sawah. Hasil produksi satu musim tanam diperoleh sebagai berikut:

knitr::include_graphics("D:\\AGH 25\\soal BNT.png")

Hipotesis

knitr::include_graphics("D:\\AGH 25\\hipo BNT.png")

Input Data

ulangan <- factor(rep(c("I", "II", "III", "IV", "V"), each=3))  # Ulangan 
varietas <- factor(rep(c("IR32", "IR36", "VUTW"), times=5))  # Perlakuan (varietas padi) 
hasil <- c(8, 8, 15, 9, 7, 12, 12, 6, 20, 11, 8, 17, 10, 9, 19)  # Data hasil
data_padi <- data.frame(ulangan,varietas,hasil)
str(data_padi)
## 'data.frame':    15 obs. of  3 variables:
##  $ ulangan : Factor w/ 5 levels "I","II","III",..: 1 1 1 2 2 2 3 3 3 4 ...
##  $ varietas: Factor w/ 3 levels "IR32","IR36",..: 1 2 3 1 2 3 1 2 3 1 ...
##  $ hasil   : num  8 8 15 9 7 12 12 6 20 11 ...
print(data_padi)
##    ulangan varietas hasil
## 1        I     IR32     8
## 2        I     IR36     8
## 3        I     VUTW    15
## 4       II     IR32     9
## 5       II     IR36     7
## 6       II     VUTW    12
## 7      III     IR32    12
## 8      III     IR36     6
## 9      III     VUTW    20
## 10      IV     IR32    11
## 11      IV     IR36     8
## 12      IV     VUTW    17
## 13       V     IR32    10
## 14       V     IR36     9
## 15       V     VUTW    19

Model Anova

anova <- aov(hasil ~ varietas, data=data_padi)
summary(anova)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## varietas     2  217.2   108.6   23.11 7.67e-05 ***
## Residuals   12   56.4     4.7                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Kesimpulan

Didapat nilai \(P\text{-Value}\) sebesar 7.67e-0.5 lebih kecil dari \(\alpha\) (0.05), sehingga tolak \(H_0\) artinya terdapat minimal ada satu perbedaan antara produksi ketiga varietas padi pada taraf nyata 5%.

Uji BNT

lsd_test <- LSD.test(anova, "varietas", p.adj = "none", alpha = 0.05)
lsd_test
## $statistics
##   MSerror Df Mean       CV  t.value      LSD
##       4.7 12 11.4 19.01709 2.178813 2.987438
## 
## $parameters
##         test p.ajusted   name.t ntr alpha
##   Fisher-LSD      none varietas   3  0.05
## 
## $means
##      hasil      std r       se       LCL       UCL Min Max Q25 Q50 Q75
## IR32  10.0 1.581139 5 0.969536  7.887563 12.112437   8  12   9  10  11
## IR36   7.6 1.140175 5 0.969536  5.487563  9.712437   6   9   7   8   8
## VUTW  16.6 3.209361 5 0.969536 14.487563 18.712437  12  20  15  17  19
## 
## $comparison
## NULL
## 
## $groups
##      hasil groups
## VUTW  16.6      a
## IR32  10.0      b
## IR36   7.6      b
## 
## attr(,"class")
## [1] "group"

Varietas dengan huruf yang berbeda (a, b, c) menunjukkan bahwa rataan hasil produksi mereka berbeda secara signifikan satu sama lain.
Jika dua varietas memiliki huruf yang sama, itu berarti tidak ada perbedaan signifikan di antara mereka

Nilai LSD = 2.987438

VUTW (16.6) dikelompokkan ke dalam grup a, artinya rataan hasil VUTW adalah yang paling tinggi.

IR32 (10.0) dikelompokkan ke dalam grup b, artinya rataan hasil IR32 berbeda secara signifikan dari VUTW.

IR36 (7.6) dikelompokkan ke dalam grup b, artinya rataan hasil IR36 berbeda secara signifikan dari IR32, namun tidak ada perbedaan secara signifikan terhadap VUTW.

Beda Nyata Jujur (BNJ/Tukey)

Input Data (RAL)

RAL_1 <- data.frame(
  Perlakuan = factor(rep(c("A", "B", "C", "D"), each = 6)),
  Hasil = c(25.1, 17.2, 26.4, 16.1, 22.2, 15.9,   # Data untuk Perlakuan A
            40.2, 35.3, 32.0, 36.5, 43.3, 37.1,   # Data untuk Perlakuan B
            18.3, 22.6, 25.9, 15.1, 11.4, 23.7,   # Data untuk Perlakuan C
            28.0, 28.6, 33.2, 31.7, 30.3, 27.6)   # Data untuk Perlakuan D
)
# Melihat data
print(RAL_1)
##    Perlakuan Hasil
## 1          A  25.1
## 2          A  17.2
## 3          A  26.4
## 4          A  16.1
## 5          A  22.2
## 6          A  15.9
## 7          B  40.2
## 8          B  35.3
## 9          B  32.0
## 10         B  36.5
## 11         B  43.3
## 12         B  37.1
## 13         C  18.3
## 14         C  22.6
## 15         C  25.9
## 16         C  15.1
## 17         C  11.4
## 18         C  23.7
## 19         D  28.0
## 20         D  28.6
## 21         D  33.2
## 22         D  31.7
## 23         D  30.3
## 24         D  27.6

Uji Anova (RAL)

anova <- aov(Hasil~Perlakuan, data=RAL_1)
summary(anova)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Perlakuan    3 1291.0   430.3   23.46 9.32e-07 ***
## Residuals   20  366.9    18.3                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Kesimpulan

Didapat nilai \(P\text{-Value}\) sebesar 9.32e-07 lebih kecil dari \(\alpha\) (0.05), sehingga tolak \(H_0\) artinya terdapat minimal satu perlakuan yang secara signifikan mempengaruhi berat melon dalam kg.

Uji BNJ/Tukey (RAL)

tukey_test <- HSD.test(anova, trt="Perlakuan", group=TRUE) #Paket Agricole
print(tukey_test)
## $statistics
##    MSerror Df     Mean       CV      MSD
##   18.34442 20 26.82083 15.96907 6.921246
## 
## $parameters
##    test    name.t ntr StudentizedRange alpha
##   Tukey Perlakuan   4         3.958293  0.05
## 
## $means
##      Hasil      std r       se  Min  Max    Q25   Q50    Q75
## A 20.48333 4.696133 6 1.748543 15.9 26.4 16.375 19.70 24.375
## B 37.40000 3.927340 6 1.748543 32.0 43.3 35.600 36.80 39.425
## C 19.50000 5.560935 6 1.748543 11.4 25.9 15.900 20.45 23.425
## D 29.90000 2.230695 6 1.748543 27.6 33.2 28.150 29.45 31.350
## 
## $comparison
## NULL
## 
## $groups
##      Hasil groups
## B 37.40000      a
## D 29.90000      b
## A 20.48333      c
## C 19.50000      c
## 
## attr(,"class")
## [1] "group"

Dari hasil output diatas dapat diambil kesimpulan bahwa varietas A dan C berada pada grup yang sama yang artinya rataannya tidak berbeda nyata terhadap respon yang diamati pada taraf nyata 5%. Selain itu, antara B dan D, B dan A, B dan C, D dan A, D dan C memiliki rataan yang berbeda nyata terhadap respon yang diamati pada taraf nyata 5%.

Input Data (RAK)

  1. Pastikan sudah menginstall package agricole.
  2. Data dalam format data frame (perlakuan, blok dan hasil pengukuran)
  3. Lakukan uji ANOVA.
  4. Lakukan uji lanjut HSD.test dari package agricole

Input data (RAK)

RAK_1 <- read.csv("D:\\AGH 25\\RAK-DATA 1.csv") #BENTUK UMUM
head(RAK_1) #Menampilkan 6 data teratas
##    Hari   A   B   C   D
## 1 Hari1 260 308 323 330
## 2 Hari2 280 358 343 345
## 3 Hari3 298 353 350 333
## 4 Hari4 288 323 365 363
str(RAK_1)
## 'data.frame':    4 obs. of  5 variables:
##  $ Hari: chr  "Hari1" "Hari2" "Hari3" "Hari4"
##  $ A   : int  260 280 298 288
##  $ B   : int  308 358 353 323
##  $ C   : int  323 343 350 365
##  $ D   : int  330 345 333 363
# Mengonversi Bentuk Variabel
RAK_1$Hari <- as.factor(RAK_1$Hari)
str(RAK_1)
## 'data.frame':    4 obs. of  5 variables:
##  $ Hari: Factor w/ 4 levels "Hari1","Hari2",..: 1 2 3 4
##  $ A   : int  260 280 298 288
##  $ B   : int  308 358 353 323
##  $ C   : int  323 343 350 365
##  $ D   : int  330 345 333 363
## Merapikan Data
RAK_1_1 <- pivot_longer(RAK_1,
                       cols=c(A,B,C,D),
                        names_to ="Perlakuan", 
                       values_to = "Hasil")
head(RAK_1_1)
## # A tibble: 6 × 3
##   Hari  Perlakuan Hasil
##   <fct> <chr>     <int>
## 1 Hari1 A           260
## 2 Hari1 B           308
## 3 Hari1 C           323
## 4 Hari1 D           330
## 5 Hari2 A           280
## 6 Hari2 B           358

Uji Anova (RAK)

hasil_anova <- aov(Hasil ~ Perlakuan + Hari, data = RAK_1_1)
summary(hasil_anova)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Perlakuan    3  10886    3629  19.031 0.000309 ***
## Hari         3   2373     791   4.149 0.042052 *  
## Residuals    9   1716     191                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Uji BNJ / Tukey (RAK)

tukey_test1 <- HSD.test(hasil_anova, trt="Perlakuan", group=TRUE) 
print(tukey_test1)
## $statistics
##    MSerror Df   Mean       CV      MSD
##   190.6667  9 326.25 4.232402 30.48087
## 
## $parameters
##    test    name.t ntr StudentizedRange alpha
##   Tukey Perlakuan   4          4.41489  0.05
## 
## $means
##    Hasil      std r       se Min Max    Q25   Q50    Q75
## A 281.50 16.11418 4 6.904105 260 298 275.00 284.0 290.50
## B 335.50 23.97916 4 6.904105 308 358 319.25 338.0 354.25
## C 345.25 17.44276 4 6.904105 323 365 338.00 346.5 353.75
## D 342.75 14.97498 4 6.904105 330 363 332.25 339.0 349.50
## 
## $comparison
## NULL
## 
## $groups
##    Hasil groups
## C 345.25      a
## D 342.75      a
## B 335.50      a
## A 281.50      b
## 
## attr(,"class")
## [1] "group"

Grup a (yang terdiri dari B, C, dan D) menunjukkan bahwa rata-rata dari perlakuan B, C, dan D tidak memiliki perbedaan yang signifikan antara satu sama lain.
Grup b, yang hanya terdiri dari A, menunjukkan bahwa A berbeda secara signifikan dari grup a, yang mencakup B, C, dan D.

tukey_test2 <- HSD.test(hasil_anova, trt="Hari", group=TRUE) 
print(tukey_test2)
## $statistics
##    MSerror Df   Mean       CV      MSD
##   190.6667  9 326.25 4.232402 30.48087
## 
## $parameters
##    test name.t ntr StudentizedRange alpha
##   Tukey   Hari   4          4.41489  0.05
## 
## $means
##        Hasil      std r       se Min Max    Q25   Q50    Q75
## Hari1 305.25 31.53173 4 6.904105 260 330 296.00 315.5 324.75
## Hari2 331.50 34.97142 4 6.904105 280 358 327.25 344.0 348.25
## Hari3 333.50 25.25206 4 6.904105 298 353 324.25 341.5 350.75
## Hari4 334.75 36.68219 4 6.904105 288 365 314.25 343.0 363.50
## 
## $comparison
## NULL
## 
## $groups
##        Hasil groups
## Hari4 334.75      a
## Hari3 333.50      a
## Hari2 331.50      a
## Hari1 305.25      a
## 
## attr(,"class")
## [1] "group"

UJI DUNCAN

# 1. Input Data
data <- data.frame(
  perlakuan = rep(c("A", "B", "C", "D"), each = 5),    # Perlakuan
  respons = c(20, 22, 21, 23, 24,                     # Hasil pengukuran untuk perlakuan A
               25, 26, 27, 28, 29,                     # Hasil pengukuran untuk perlakuan B
               30, 31, 32, 33, 34,                     # Hasil pengukuran untuk perlakuan C
               35, 36, 37, 38, 39)                     # Hasil pengukuran untuk perlakuan D
)

# 2. Melakukan ANOVA
anova_result <- aov(respons ~ perlakuan, data = data)


# 3. Melihat hasil ANOVA
summary(anova_result)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## perlakuan    3    625   208.3   83.33 5.57e-10 ***
## Residuals   16     40     2.5                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 4. Uji Duncan menggunakan duncan.test dari paket Agricolae
duncan_result <- duncan.test(anova_result, trt = "perlakuan", group = TRUE, console = TRUE)
## 
## Study: anova_result ~ "perlakuan"
## 
## Duncan's new multiple range test
## for respons 
## 
## Mean Square Error:  2.5 
## 
## perlakuan,  means
## 
##   respons      std r        se Min Max Q25 Q50 Q75
## A      22 1.581139 5 0.7071068  20  24  21  22  23
## B      27 1.581139 5 0.7071068  25  29  26  27  28
## C      32 1.581139 5 0.7071068  30  34  31  32  33
## D      37 1.581139 5 0.7071068  35  39  36  37  38
## 
## Alpha: 0.05 ; DF Error: 16 
## 
## Critical Range
##        2        3        4 
## 2.119905 2.223004 2.287451 
## 
## Means with the same letter are not significantly different.
## 
##   respons groups
## D      37      a
## C      32      b
## B      27      c
## A      22      d
# 5. Menampilkan hasil uji Duncan
print(duncan_result)
## $statistics
##   MSerror Df Mean       CV
##       2.5 16 29.5 5.359793
## 
## $parameters
##     test    name.t ntr alpha
##   Duncan perlakuan   4  0.05
## 
## $duncan
##      Table CriticalRange
## 2 2.997999      2.119905
## 3 3.143802      2.223004
## 4 3.234945      2.287451
## 
## $means
##   respons      std r        se Min Max Q25 Q50 Q75
## A      22 1.581139 5 0.7071068  20  24  21  22  23
## B      27 1.581139 5 0.7071068  25  29  26  27  28
## C      32 1.581139 5 0.7071068  30  34  31  32  33
## D      37 1.581139 5 0.7071068  35  39  36  37  38
## 
## $comparison
## NULL
## 
## $groups
##   respons groups
## D      37      a
## C      32      b
## B      27      c
## A      22      d
## 
## attr(,"class")
## [1] "group"

Kesimpulan

Antar perlakuan menunjukkan perbedaan signifikan di antara rata-rata kelompok perlakuan pada taraf nyata 5%.

UJI DUNNET

Membandingkan perlakuan lain dengan kontrol (yang tidak diberi perlakuan)

library(multcomp)
## Warning: package 'multcomp' was built under R version 4.3.2
## Loading required package: mvtnorm
## Loading required package: survival
## Loading required package: TH.data
## Warning: package 'TH.data' was built under R version 4.3.2
## Loading required package: MASS
## Warning: package 'MASS' was built under R version 4.3.3
## 
## Attaching package: 'TH.data'
## The following object is masked from 'package:MASS':
## 
##     geyser
# Input data
data_dunnet <- data.frame(
  treatment = factor(rep(c("Control", "A", "B", "C"), each = 10)),  # 10 pengulangan per perlakuan
  respon = c(25, 27, 24, 26, 30, 28, 29, 27, 26, 25,  # Data untuk kontrol
             31, 33, 35, 30, 32, 34, 31, 30, 29, 32,  # Data untuk perlakuan A
             40, 42, 41, 39, 43, 40, 41, 42, 39, 41,  # Data untuk perlakuan B
             45, 48, 46, 47, 49, 48, 46, 45, 47, 46)  # Data untuk perlakuan C
)

# Melihat struktur data
print(data_dunnet)
##    treatment respon
## 1    Control     25
## 2    Control     27
## 3    Control     24
## 4    Control     26
## 5    Control     30
## 6    Control     28
## 7    Control     29
## 8    Control     27
## 9    Control     26
## 10   Control     25
## 11         A     31
## 12         A     33
## 13         A     35
## 14         A     30
## 15         A     32
## 16         A     34
## 17         A     31
## 18         A     30
## 19         A     29
## 20         A     32
## 21         B     40
## 22         B     42
## 23         B     41
## 24         B     39
## 25         B     43
## 26         B     40
## 27         B     41
## 28         B     42
## 29         B     39
## 30         B     41
## 31         C     45
## 32         C     48
## 33         C     46
## 34         C     47
## 35         C     49
## 36         C     48
## 37         C     46
## 38         C     45
## 39         C     47
## 40         C     46
# Uji ANOVA
anova_result2 <- aov(respon ~ treatment, data = data_dunnet)

# Melihat hasil ANOVA
summary(anova_result2)
##             Df Sum Sq Mean Sq F value Pr(>F)    
## treatment    3 2416.1   805.4   302.3 <2e-16 ***
## Residuals   36   95.9     2.7                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Melakukan uji Dunnett
# Menetapkan "Control" sebagai kontrol
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.2
## 
## Attaching package: 'DescTools'
## The following object is masked from 'package:car':
## 
##     Recode
dunnett_result <- DunnettTest(x = data_dunnet$respon, g = data_dunnet$treatment, control = "Control")

# Menampilkan hasil uji Dunnett
print(dunnett_result)
## 
##   Dunnett's test for comparing several treatments with a control :  
##     95% family-wise confidence level
## 
## $Control
##           diff    lwr.ci    upr.ci    pval    
## A-Control  5.0  3.210026  6.789974 8.4e-08 ***
## B-Control 14.1 12.310026 15.889974 < 2e-16 ***
## C-Control 20.0 18.210026 21.789974 < 2e-16 ***
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Kesimpulan

Pr(>|t|): menampilkan nilai p, yang menunjukkan apakah perbedaan rata-rata antara perlakuan dan kontrol signifikan secara stastistik. Nilai p yang lebih kecil dari tingkat signifikansi (misalnya 0.05) menunjukkan perbedaan yang signifikan.
Berdasarkan, pada hasil analisis diatas didapat bahwa semua perlakuan memberikan/menunjukkan perbedaan yang signifikan.