R model.matrix имена столбцов для факторов - PullRequest
0 голосов
/ 17 января 2019

Я использую model.matrix для создания матрицы, используемой GLM.

formula_test <- as.formula("Y ~ x1 + x2")
data_test <- expand.grid(
  Y = 1:100
  , x1 = c("A","B")
  , x2 = 1:20
)
result_test <- data.frame(model.matrix(
  object = formula_test
  , data = data_test
))
names(result_test)

Интересно, что имена столбцов данных result_test: "X.Intercept." "x1B" "x2"

Почему имя второго столбца не "x1A"?

Затем я попытался data_test$x1 <- factor(x = data_test$x1, levels = c("A","B")), но все равно.

1 Ответ

0 голосов
/ 17 января 2019

Это потому, что если бы у вас было 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"  
...