R-控制模型矩阵中的交互顺序

时间:2019-03-16 08:02:30

标签: r interaction model.matrix

我想在设计矩阵中控制交互伪代码的顺序,与主要效果伪代码的顺序分开。具体来说,进行交互的术语的循环顺序。

例如:

df <- expand.grid(X1 = letters[1:3],
                  X2 = LETTERS[24:26])

将公式写为~X1+X2+X1:X2时,交互设计会依次遍历X2X1

model.matrix(~X1+X2+X1:X2, df)
#>   (Intercept) X1b X1c X2Y X2Z X1b:X2Y X1c:X2Y X1b:X2Z X1c:X2Z
#> 1           1   0   0   0   0       0       0       0       0
#> 2           1   1   0   0   0       0       0       0       0
#> 3           1   0   1   0   0       0       0       0       0
#> 4           1   0   0   1   0       0       0       0       0
#> 5           1   1   0   1   0       1       0       0       0
#> 6           1   0   1   1   0       0       1       0       0
#> 7           1   0   0   0   1       0       0       0       0
#> 8           1   1   0   0   1       0       0       1       0
#> 9           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")$X1
#> [1] "contr.treatment"
#> 
#> attr(,"contrasts")$X2
#> [1] "contr.treatment"

当我将公式中的交互项翻转到~X1+X2+X2:X1时,交互设计仍然会先循环到X2,然后再循环到X1

model.matrix(~X1+X2+X2:X1, df)
#>   (Intercept) X1b X1c X2Y X2Z X1b:X2Y X1c:X2Y X1b:X2Z X1c:X2Z
#> 1           1   0   0   0   0       0       0       0       0
#> 2           1   1   0   0   0       0       0       0       0
#> 3           1   0   1   0   0       0       0       0       0
#> 4           1   0   0   1   0       0       0       0       0
#> 5           1   1   0   1   0       1       0       0       0
#> 6           1   0   1   1   0       0       1       0       0
#> 7           1   0   0   0   1       0       0       0       0
#> 8           1   1   0   0   1       0       0       1       0
#> 9           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")$X1
#> [1] "contr.treatment"
#> 
#> attr(,"contrasts")$X2
#> [1] "contr.treatment"

我最后想要的是以下设计矩阵:

#>   (Intercept) X1b X1c X2Y X2Z X1b:X2Y X1b:X2Z X1c:X2Y X1c:X2Z
#> 1           1   0   0   0   0       0       0       0       0
#> 2           1   1   0   0   0       0       0       0       0
#> 3           1   0   1   0   0       0       0       0       0
#> 4           1   0   0   1   0       0       0       0       0
#> 5           1   1   0   1   0       1       0       0       0
#> 6           1   0   1   1   0       0       0       1       0
#> 7           1   0   0   0   1       0       0       0       0
#> 8           1   1   0   0   1       0       1       0       0
#> 9           1   0   1   0   1       0       0       0       1

谢谢!

0 个答案:

没有答案