Next: , Previous: More advanced examples, Up: More advanced examples



10.6.1 區組設計中的效率因數

下面是一個有點枯燥但較為完整的例子。它是用來 計算一個區組設計中的效率因數(這個問題的 一些方面在 Index arrays已經討論過了)。

區組設計(block design)需要考慮兩個因數 blocks (b 個水準) 和 varieties (v 個水準)。如果R 和 K 分別是 v × v 和 b × b 重複(replications)及 區組大小(block size)矩陣而 N 則是 b × v 的關聯矩陣,那麼 那麼效率因數就是這個矩陣的特徵值。 E = I_v - R^{-1/2}N'K^{-1}NR^{-1/2} = I_v - A'A, where A = K^{-1/2}NR^{-1/2}. 寫這個函數的一種方式就是

     > bdeff <- function(blocks, varieties) {
         blocks <- as.factor(blocks)             # minor safety move
         b <- length(levels(blocks))
         varieties <- as.factor(varieties)       # minor safety move
         v <- length(levels(varieties))
         K <- as.vector(table(blocks))           # 去掉 dim 屬性
         R <- as.vector(table(varieties))        # 去掉 dim 屬性
         N <- table(blocks, varieties)
         A <- 1/sqrt(K) * N * rep(1/sqrt(R), rep(b, v))
         sv <- svd(A)
         list(eff=1 - sv$d^2, blockcv=sv$u, varietycv=sv$v)
     }

這種情況下,奇異值分解 比求解特徵值效率高。

函數的結果是一個列表。它不僅以第一個分量的形式給出了 效率因數,還給出了區組和規範對照資訊, 因為有些時候這些會給出額外有用的 定量資訊。