Unconstrained Design matrix for factorial experiment in R
r, statistics
Solution
I think the key is to set all contrasts to FALSE. I guess technically this could be a one-liner...it would just be a really long line.
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
Problem
I want to create an unconstrained design matrix for factorial experiment in R and the following code gives me the desired matrix. But the code requires separate `model.matrix` command for each factor as well as for intercept term. I'm curious whether the same result can be obtained by a single liner. Thanks ``` 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) ```