我使用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")),但它仍然是一样的。
发布于 2019-01-17 09:25:14
这是因为如果你有c("X.Intercept.", "x1A", "x1B", "x2"),那么你就会有完美的多重共线性:x1A + x1B将是一列1,就像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" https://stackoverflow.com/questions/54227571
复制相似问题