El estadístico t puede tener casi nada que decir sobre la capacidad predictiva de una característica, y no se deben usar para eliminar el predictor o permitir que los predictores entren en un modelo predictivo.
Los valores P dicen que las características espurias son importantes
Considere la siguiente configuración de escenario en R. Creemos dos vectores, el primero es simplemente monedas al azar:5000
set.seed(154)
N <- 5000
y <- rnorm(N)
El segundo vector son observaciones, cada una asignada aleatoriamente a una de 500 clases aleatorias de igual tamaño:5000500
N.classes <- 500
rand.class <- factor(cut(1:N, N.classes))
Ahora ajustamos un modelo lineal para predecir y
dado rand.classes
.
M <- lm(y ~ rand.class - 1) #(*)
La correcta valor para todos los coeficientes es cero, ninguno de ellos tiene ningún poder predictivo. Sin embargo, muchos de ellos son significativos al nivel del 5%
ps <- coef(summary(M))[, "Pr(>|t|)"]
hist(ps, breaks=30)
De hecho, deberíamos esperar que alrededor del 5% de ellos sean significativos, ¡aunque no tengan poder predictivo!
Los valores P no pueden detectar características importantes
Aquí hay un ejemplo en la otra dirección.
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)
He creado dos predictores correlacionados , cada uno con poder predictivo.
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
Los valores p no pueden detectar el poder predictivo de ambas variables porque la correlación afecta la precisión con que el modelo puede estimar los dos coeficientes individuales a partir de los datos.
Las estadísticas inferenciales no están ahí para informar sobre el poder predictivo o la importancia de una variable. Es un abuso de estas medidas usarlas de esa manera. Hay opciones mucho mejores disponibles para la selección de variables en modelos lineales predictivos, considere usar glmnet
.
(*) Tenga en cuenta que estoy dejando una intercepción aquí, por lo que todas las comparaciones son a la línea de base de cero, no a la media grupal de la primera clase. Esta fue la sugerencia de @ whuber.
Como condujo a una discusión muy interesante en los comentarios, el código original fue
rand.class <- factor(sample(1:N.classes, N, replace=TRUE))
y
M <- lm(y ~ rand.class)
que condujo al siguiente histograma