t统计量几乎不能说出特征的预测能力,因此不应将其用于筛选预测变量或将预测变量纳入预测模型。
P值表示虚假特征很重要
考虑一下R中的以下场景设置。让我们创建两个向量,第一个是简单的随机硬币翻转:5000
set.seed(154)
N <- 5000
y <- rnorm(N)
第二个向量是观测值,每个观测值随机分配给大小相等的随机类之一:5005000500
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)
导致以下直方图