1

我想控制设计矩阵中交互虚拟代码的顺序,与主效应虚拟代码的顺序分开。特别是进行交互的术语的循环顺序。

例如:

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

当写公式为时~X1+X2+X1:X2,交互设计X2循环往复X1

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

谢谢!

4

0 回答 0