rmodel.matrix

Specifically assign contrasts in R model.matrix


If I have a variable (condition) of 2 levels and want to create a model.matrix R automatically assigns conditionB as the term in the design matrix.

condition <- as.factor( c("A","A","A","B","B","B"))
df <- data.frame(condition)
design <- model.matrix( ~ condition)

> df
  condition
1         A
2         A
3         A
4         B
5         B
6         B


> design
  (Intercept) conditionB
1           1          0
2           1          0
3           1          0
4           1          1
5           1          1
6           1          1
attr(,"assign")
[1] 0 1
attr(,"contrasts")
attr(,"contrasts")$condition
[1] "contr.treatment"

Question: I would like to have my results relative to conditionA. How can I specify this in model.matrix() ?

(A workaround would be to inverse the resulting FCs)


Solution

  • You can use the C function to determine the base that you want to be taken into consideration:

    Taking A as the base:

     model.matrix(~C(condition,base=1))
      (Intercept) C(condition, base = 1)2
    1           1                       0
    2           1                       0
    3           1                       0
    4           1                       1
    5           1                       1
    6           1                       1
    attr(,"assign")
    [1] 0 1
    attr(,"contrasts")
    attr(,"contrasts")$`C(condition, base = 1)`
      2
    A 0
    B 1
    

    Taking B as the base:

    model.matrix(~C(condition,base=2))
      (Intercept) C(condition, base = 2)1
    1           1                       1
    2           1                       1
    3           1                       1
    4           1                       0
    5           1                       0
    6           1                       0
    attr(,"assign")
    [1] 0 1
    attr(,"contrasts")
    attr(,"contrasts")$`C(condition, base = 2)`
      1
    A 1
    B 0