Я хотел бы контролировать порядок фиктивных кодов взаимодействия в расчетной матрице отдельно от порядка фиктивных кодов основных эффектов. В частности, порядок, в котором циклы, которые делают взаимодействие циклически.
Например:
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
Спасибо!