आर

2012-11-17 6 views
8

में फैक्टोरियल प्रयोग के लिए अनन्य डिज़ाइन मैट्रिक्स मैं आर में फैक्टोरियल प्रयोग के लिए एक अनियंत्रित डिज़ाइन मैट्रिक्स बनाना चाहता हूं और निम्न कोड मुझे वांछित मैट्रिक्स देता है। लेकिन कोड को प्रत्येक कारक के साथ-साथ अवरोध अवधि के लिए अलग model.matrix कमांड की आवश्यकता होती है। मैं उत्सुक हूं कि एक ही लाइनर द्वारा एक ही परिणाम प्राप्त किया जा सकता है। धन्यवादआर

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

मुझे लगता है कि कुंजी गलत करने के लिए सभी विरोधाभासों स्थापित करने के लिए है। मुझे लगता है कि तकनीकी रूप से यह एक लाइनर हो सकता है ... यह वास्तव में एक लंबी लाइन होगी।

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

नहीं एक एक लाइनर, लेकिन शायद कुछ हद तक सरल:

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)