Это потому, что если бы у вас было c("X.Intercept.", "x1A", "x1B", "x2")
, то у вас была бы идеальная мультиколлинеарность: x1A + x1B
был бы столбцом из них, как столбец X.Intercept.
. Если для интерпретации вы предпочитаете иметь x1A
вместо перехвата, мы можем использовать
formula_test <- as.formula("Y ~ -1 + x1 + x2")
1008 * дает *
names(result_test)
# [1] "x1A" "x1B" "x2"
и
all(rowSums(result_test[, c("x1A", "x1B")]) == 1)
# [1] TRUE
Что касается того, почему выбрасывается x1A
, а не x1B
, то, как представляется, правило заключается в том, что уровни первого фактора исчезают. Если вместо этого мы используем
levels(data_test$x1) <- c("B", "A")
тогда это дает
names(result_test)
# [1] "X.Intercept." "x1A" "x2"