2012-11-17 8 views
8

Rの階乗実験のための無制約の設計行列を作成したいと思います。次のコードは私に目的の行列を与えます。しかし、このコードでは、各因子とインターセプトタームのために別々のmodel.matrixコマンドが必要です。私は同じ結果が単一のライナーで得られるかどうかは不思議です。おかげRの階乗実験のための無限の設計行列R

y <- c(55, 56, 57, 53, 54, 55, 51, 52, 53, 61, 62, 63) 
N <- gl(n = 2, k = 6, length = 2 * 6 
     , labels = c("Low", "High") 
     , ordered = FALSE) 
P <- gl(n = 2, k = 3, length = 2 * 6 
     , labels = c("Low", "High") 
     , ordered = FALSE) 
Data <- data.frame(y, N, P) 

X <- 
    cbind(
     model.matrix(object = y ~ 1,  data = Data) 
    , model.matrix(object = y ~ -1 + N, data = Data) 
    , model.matrix(object = y ~ -1 + P, data = Data) 
    , model.matrix(object = y ~ -1 + N:P, data = Data) 
    ) 

print(x = X) 

答えて

3

私は鍵がFALSEにすべてのコントラストを設定することだと思います。私は技術的にはこれが1ライナーかもしれないと思います...それはちょうど本当に長いラインに過ぎません。

model.matrix(y ~ N +P + N:P, data=Data, 
     contrasts.arg = lapply(Data[,sapply(Data, is.factor)], 
          contrasts, contrasts=FALSE)) 


    (Intercept) NLow NHigh PLow PHigh NLow:PLow NHigh:PLow NLow:PHigh NHigh:PHigh 
1   1 1  0 1  0   1   0   0   0 
2   1 1  0 1  0   1   0   0   0 
3   1 1  0 1  0   1   0   0   0 
4   1 1  0 0  1   0   0   1   0 
5   1 1  0 0  1   0   0   1   0 
6   1 1  0 0  1   0   0   1   0 
7   1 0  1 1  0   0   1   0   0 
8   1 0  1 1  0   0   1   0   0 
9   1 0  1 1  0   0   1   0   0 
10   1 0  1 0  1   0   0   0   1 
11   1 0  1 0  1   0   0   0   1 
12   1 0  1 0  1   0   0   0   1 
attr(,"assign") 
[1] 0 1 1 2 2 3 3 3 3 
attr(,"contrasts") 
attr(,"contrasts")$N 
    Low High 
Low 1 0 
High 0 1 

attr(,"contrasts")$P 
    Low High 
Low 1 0 
High 0 1 
3

ない1つのライナー、おそらくやや単純:

contrasts(N, nlevels(N)) <- diag(nlevels(N)) 
contrasts(P, nlevels(P)) <- diag(nlevels(P)) 
Data2 <- data.frame(y, N, P) 
X2 <- model.matrix(y ~ 1 + N + P + N:P, data=Data2)