R model.matrix因子的列名

时间:2019-01-17 00:57:00

标签: r names model.matrix

我使用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 :(得分:1)

这是因为如果您拥有c("X.Intercept.", "x1A", "x1B", "x2"),那么您将具有完美的多重共线性:x1A + x1B将是一列,就像X.Intercept.列一样。如果出于解释的原因,您更喜欢使用x1A而不是截距,我们可以使用

formula_test <- as.formula("Y ~ -1 + x1 + x2")

给予

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"