La statistique t peut n'avoir presque rien à dire sur la capacité prédictive d'une caractéristique, et elle ne doit pas être utilisée pour exclure le prédicteur ou autoriser les prédicteurs dans un modèle prédictif.
Les valeurs P indiquent que les caractéristiques parasites sont importantes
Considérez la configuration de scénario suivante dans R. Créons deux vecteurs, le premier est simplement tours de pièces aléatoires:5000
set.seed(154)
N <- 5000
y <- rnorm(N)
Le deuxième vecteur est de observations, chacune assignée au hasard à l'une des 500 classes aléatoires de taille égale:5000500
N.classes <- 500
rand.class <- factor(cut(1:N, N.classes))
Maintenant, nous ajustons un modèle linéaire pour prédire y
donné rand.classes
.
M <- lm(y ~ rand.class - 1) #(*)
La valeur correcte pour tous les coefficients est nulle, aucun d'entre eux n'a de pouvoir prédictif. Néanmoins, beaucoup d'entre eux sont significatifs au niveau de 5%
ps <- coef(summary(M))[, "Pr(>|t|)"]
hist(ps, breaks=30)
En fait, nous devrions nous attendre à ce qu'environ 5% d'entre eux soient significatifs, même s'ils n'ont aucun pouvoir prédictif!
Les valeurs P ne parviennent pas à détecter les caractéristiques importantes
Voici un exemple dans l'autre sens.
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)
J'ai créé deux prédicteurs corrélés , chacun avec une puissance prédictive.
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
Les valeurs de p ne parviennent pas à détecter le pouvoir prédictif des deux variables car la corrélation affecte la précision avec laquelle le modèle peut estimer les deux coefficients individuels à partir des données.
Les statistiques déductives ne sont pas là pour parler du pouvoir prédictif ou de l'importance d'une variable. C'est un abus de ces mesures de les utiliser de cette façon. Il existe de bien meilleures options disponibles pour la sélection des variables dans les modèles linéaires prédictifs, pensez à utiliser glmnet
.
(*) Notez que je laisse une interception ici, donc toutes les comparaisons sont à la ligne de base de zéro, pas à la moyenne du groupe de la première classe. C'était la suggestion de @ whuber.
Puisqu'il a conduit à une discussion très intéressante dans les commentaires, le code original était
rand.class <- factor(sample(1:N.classes, N, replace=TRUE))
et
M <- lm(y ~ rand.class)
qui a conduit à l'histogramme suivant