Generating Balanced Incomplete Block (BIB) Design

Seandainya kita ingin melakukan percobaan BIB dengan sejumlah \(v\) perlakuan dan \(b\) kelompok. Namun setiap kelompok hanya memuat \(k\) perlakuan, sehingga setiap perlakuan diulang sebanyak \(r\) kali dalam percobaan, dengan banyaknya ulangan setiap pasangan perlakuan adalah \(\lambda\).

library(ibd)
set.seed(123)
des<-bibd(v=4, b=4, r=3, k=3, lambda=2)
## v: banyaknya perlakuan
## b: banyaknya kelompok/blok
## r: banyaknya ulangan untuk masing-masing perlakuan
## k: banyaknya perlakuan pada setiap blok
## lambda: banyaknya ulangan pada setiap pasangan perlakuan

des$design
##         [,1] [,2] [,3]
## Block-1    1    3    4
## Block-2    2    3    4
## Block-3    1    2    4
## Block-4    1    2    3

Output di atas menunjukkan bahwa pada blok 1, digunakan perlakuan 1, 3, dan 4. Pada blok 2 digunakan perlakuan 2, 3, dan 4, dan seterusnya. Perlu diingat pula bahwa pengacakan perlu dilakukan dalam menempatkan urutan perlakuan di setiap blok.

Importing the Data

Illustration from Montgomery (2013)

Silahkan perhatikan kembali ilustrasi yang dibahas pada modul praktikum STA 521 pertemuan ke-2, yang diambil dari Montgomery (2013). Perhatikan pula tabulasi data yang diinput pada program berikut ini.

gasoline<-read.csv("https://raw.githubusercontent.com/raoy/data/master/example.csv")
gasoline
##    Treatment Block Response
## 1          1     1       73
## 2          3     1       73
## 3          4     1       75
## 4          1     2       74
## 5          2     2       75
## 6          3     2       75
## 7          2     3       67
## 8          3     3       68
## 9          4     3       72
## 10         1     4       71
## 11         2     4       72
## 12         4     4       75
xtabs(Response~Treatment+Block, data=gasoline)
##          Block
## Treatment  1  2  3  4
##         1 73 74  0 71
##         2  0 75 67 72
##         3 73 75 68  0
##         4 75  0 72 75

Sebagai catatan, nilai 0 pada output tabel di atas menunjukkan bahwa tidak ada pengamatan pada pasangan perlakuan dan blok tersebut.

Analysis

Uji hipotesis untuk pengaruh perlakuan dapat dilakukan dengan uji-F yang merupakan rasio antara kuadrat tengah galat dari perlakuan (adjusted) terhadap kuadrat tengah galat. Begitu pula halnya dengan uji hipotesis untuk pengaruh blok, dilakukan menggunakan kuadrat tengah galat dari blok (adjusted).

library(daewr)

mod1<-aov( Response ~ as.factor(Block)+as.factor(Treatment), data = gasoline)
summary(mod1)
##                      Df Sum Sq Mean Sq F value  Pr(>F)   
## as.factor(Block)      3  55.00  18.333   28.20 0.00147 **
## as.factor(Treatment)  3  22.75   7.583   11.67 0.01074 * 
## Residuals             5   3.25   0.650                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Silahkan buka kembali catatan Anda pada praktikum minggu lalu, dan perhatikan apakah F-hitung yang diperoleh pada perhitungan manual sama dengan output di atas?

Perhatikan bahwa tabel anova di atas belum menampilkan nilai blok (adjusted). Oleh karenanya, kita perlu menambahkan perintah berikut ini.

drop1(mod1,test="F")
## Single term deletions
## 
## Model:
## Response ~ as.factor(Block) + as.factor(Treatment)
##                      Df Sum of Sq    RSS    AIC F value    Pr(>F)    
## <none>                             3.250 -1.675                      
## as.factor(Block)      3    66.083 69.333 29.048  33.889 0.0009528 ***
## as.factor(Treatment)  3    22.750 26.000 17.278  11.667 0.0107387 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Silahkan periksa kembali perhitungan manual Anda minggu lalu, dan bandingkan dengan F-hitung pada tabel di atas.

Untuk memperoleh tabel anova dengan nilai yang sudah di-adjust pada blok dan perlakuan, kita dapat pula menggunakan fungsi aov.ibd seperti di bawah ini.

mod2<-ibd::aov.ibd(Response ~ as.factor(Block)+as.factor(Treatment), data = gasoline)
mod2$ANOVA.table
## Anova Table (Type III tests)
## 
## Response: Response
##                      Sum Sq Df   F value    Pr(>F)    
## (Intercept)          8948.7  1 13767.198 8.528e-10 ***
## as.factor(Block)       66.1  3    33.889 0.0009528 ***
## as.factor(Treatment)   22.7  3    11.667 0.0107387 *  
## Residuals               3.3  5                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Multiple Comparison

Perbandingan Ganda Tukey

library(lsmeans)
lsmeans(mod1,pairwise~Treatment,adjust=("tukey"))
## $lsmeans
##  Treatment lsmean    SE df lower.CL upper.CL
##          1   71.4 0.487  5     70.1     72.6
##          2   71.6 0.487  5     70.4     72.9
##          3   72.0 0.487  5     70.7     73.3
##          4   75.0 0.487  5     73.7     76.3
## 
## Results are averaged over the levels of: Block 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast estimate    SE df t.ratio p.value
##  1 - 2      -0.250 0.698  5  -0.358  0.9825
##  1 - 3      -0.625 0.698  5  -0.895  0.8085
##  1 - 4      -3.625 0.698  5  -5.192  0.0130
##  2 - 3      -0.375 0.698  5  -0.537  0.9462
##  2 - 4      -3.375 0.698  5  -4.834  0.0175
##  3 - 4      -3.000 0.698  5  -4.297  0.0281
## 
## Results are averaged over the levels of: Block 
## P value adjustment: tukey method for comparing a family of 4 estimates

Kontras Ortogonal

gasoline$Treatment<-as.factor(gasoline$Treatment)

c1<-c(1,1,-1,-1)
c2<-c(1,-1,0,0)
c3<-c(0,0,1,-1)
contr<-cbind(c1, c2, c3)
mod3<-aov( Response ~ as.factor(Block)+Treatment, contrasts=list(Treatment=contr), data = gasoline)
summary.aov(mod3, split=list(Treatment=list("1-2 Vs 3-4"=1,
                                            "1 vs 2"=2,
                                            "3 vs 4"=3)))
##                         Df Sum Sq Mean Sq F value  Pr(>F)   
## as.factor(Block)         3  55.00  18.333  28.205 0.00147 **
## Treatment                3  22.75   7.583  11.667 0.01074 * 
##   Treatment: 1-2 Vs 3-4  1  10.67  10.667  16.410 0.00982 **
##   Treatment: 1 vs 2      1   0.08   0.083   0.128 0.73492   
##   Treatment: 3 vs 4      1  12.00  12.000  18.462 0.00774 **
## Residuals                5   3.25   0.650                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Reference

  1. Lawson, J. (2014). Design and Analysis of Experiments with R (Vol. 115). CRC press.

  2. Meier, L. (2021, February 3). Chapter 9 incomplete block designs | ANOVA: A short intro using R. https://stat.ethz.ch/~meierluk/teaching/anova/incomplete-block-designs.html

  3. Montgomery, D. C. (2013). Design and analysis of experiments. John wiley & sons.