Regression
根據 p 值選擇特徵是錯誤的嗎?
有幾篇關於如何選擇特徵的帖子。其中一種方法基於 t 統計量來描述特徵重要性。在
varImp(model)
應用於具有標準化特徵的線性模型的 R 中,使用每個模型參數的 t 統計量的絕對值。所以,基本上我們根據它的 t 統計量選擇一個特徵,這意味著係數的精確程度。但是我的係數的精確性是否告訴我有關該特徵的預測能力的一些信息?是否會發生我的特徵具有較低的 t 統計量但仍會提高(比如說)模型的準確性?如果是的話,什麼時候想根據 t 統計排除變量?或者它是否只是檢查非重要變量的預測能力的起點?
t 統計量對特徵的預測能力幾乎無話可說,它們不應用於篩選預測變量,或允許預測模型進入預測模型。
P 值表明虛假特徵很重要
考慮 R 中的以下場景設置。讓我們創建兩個向量,第一個很簡單隨機拋硬幣:
set.seed(154) N <- 5000 y <- rnorm(N)
第二個向量是觀察,每個隨機分配到一個同樣大小的隨機類:
N.classes <- 500 rand.class <- factor(cut(1:N, N.classes))
現在我們擬合一個線性模型來預測
y
給定rand.classes
的 。M <- lm(y ~ rand.class - 1) #(*)
所有係數的正確值為零,它們都沒有任何預測能力。儘管如此,其中許多在 5% 的水平上是顯著的
ps <- coef(summary(M))[, "Pr(>|t|)"] hist(ps, breaks=30)
事實上,我們應該預計其中大約 5% 是顯著的,即使它們沒有預測能力!
P 值無法檢測到重要特徵
這是另一個方向的示例。
set.seed(154) N <- 100 x1 <- runif(N) x2 <- x1 + rnorm(N, sd = 0.05) y <- x1 + x2 + rnorm(N) M <- lm(y ~ x1 + x2) summary(M)
我創建了兩個相關的預測器,每個都具有預測能力。
M <- lm(y ~ x1 + x2) summary(M) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.1271 0.2092 0.608 0.545 x1 0.8369 2.0954 0.399 0.690 x2 0.9216 2.0097 0.459 0.648
p 值無法檢測兩個變量的預測能力,因為相關性會影響模型從數據中估計兩個單獨係數的精確程度。
推論統計不能說明變量的預測能力或重要性。以這種方式使用它們是對這些測量的濫用。在預測線性模型中有更好的變量選擇可供選擇,請考慮使用
glmnet
.(*) 請注意,我在這裡省略了截距,因此所有比較都是針對零的基線,而不是針對第一類的組均值。這是@whuber 的建議。
由於它在評論中引發了非常有趣的討論,因此原始代碼是
rand.class <- factor(sample(1:N.classes, N, replace=TRUE))
和
M <- lm(y ~ rand.class)
這導致了以下直方圖