Hello, It is not very clear to me from the model.matrix documentation, why simply changing the order of terms in the formula may give a different design matrix. Please note I?m purposely not including main effects in the model formulae. set.seed(1) x1 <- rnorm(100) f1 <- factor(sample(letters[1:3], 100, replace = TRUE)) trt <- sample(c(-1,1), 100, replace = TRUE) df <- data.frame(y=y, x1=x1, f1=f1, trt=trt) head(model.matrix( ~ x1:trt + f1:trt, data = df)) (Intercept) x1:trt trt:f1b trt:f1c 1 1 -0.62036668 1 0 2 1 0.04211587 0 0 3 1 -0.91092165 0 1 4 1 0.15802877 0 1 5 1 0.65458464 0 -1 6 1 1.76728727 0 1 head(model.matrix(~ f1:trt + x1:trt, data = df)) #terms reversed (Intercept) f1a:trt f1b:trt f1c:trt trt:x1 1 1 0 1 0 -0.62036668 2 1 1 0 0 0.04211587 3 1 0 0 1 -0.91092165 4 1 0 0 1 0.15802877 5 1 0 0 -1 0.65458464 6 1 0 0 1 1.76728727 Thanks, Axel. [[alternative HTML version deleted]]