簡體   English   中英

因子的 R model.matrix 列名稱

[英]R model.matrix column names for factors

我使用 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" "X.Intercept." "x1B" "x2"

為什么第二列名稱不是"x1A"

然后我嘗試了data_test$x1 <- factor(x = data_test$x1, levels = c("A","B"))但它仍然是一樣的。

那是因為如果您有c("X.Intercept.", "x1A", "x1B", "x2") ,那么您將具有完美的多重共線性: x1A + x1B將是一列 1,就像X.Intercept.一樣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"  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM