J'utilise le paquet 'lars' dans R avec le code suivant:
> library(lars)
> set.seed(3)
> n <- 1000
> x1 <- rnorm(n)
> x2 <- x1+rnorm(n)*0.5
> x3 <- rnorm(n)
> x4 <- rnorm(n)
> x5 <- rexp(n)
> y <- 5*x1 + 4*x2 + 2*x3 + 7*x4 + rnorm(n)
> x <- cbind(x1,x2,x3,x4,x5)
> cor(cbind(y,x))
y x1 x2 x3 x4 x5
y 1.00000000 0.74678534 0.743536093 0.210757777 0.59218321 0.03943133
x1 0.74678534 1.00000000 0.892113559 0.015302566 -0.03040464 0.04952222
x2 0.74353609 0.89211356 1.000000000 -0.003146131 -0.02172854 0.05703270
x3 0.21075778 0.01530257 -0.003146131 1.000000000 0.05437726 0.01449142
x4 0.59218321 -0.03040464 -0.021728535 0.054377256 1.00000000 -0.02166716
x5 0.03943133 0.04952222 0.057032700 0.014491422 -0.02166716 1.00000000
> m <- lars(x,y,"step",trace=T)
Forward Stepwise sequence
Computing X'X .....
LARS Step 1 : Variable 1 added
LARS Step 2 : Variable 4 added
LARS Step 3 : Variable 3 added
LARS Step 4 : Variable 2 added
LARS Step 5 : Variable 5 added
Computing residuals, RSS etc .....
J'ai un ensemble de données avec 5 variables continues et j'essaie d'adapter un modèle à une seule variable (dépendante) y. Deux de mes prédicteurs sont fortement corrélés entre eux (x1, x2).
Comme vous pouvez le voir dans l'exemple ci-dessus, la fonction lars avec l'option «pas à pas» choisit d'abord la variable la plus corrélée avec y. La variable suivante pour entrer dans le modèle est celle qui est la plus corrélée avec les résidus. En effet, c'est x4:
> round((cor(cbind(resid(lm(y~x1)),x))[1,3:6]),4)
x2 x3 x4 x5
0.1163 0.2997 0.9246 0.0037
Maintenant, si je fais l'option «lasso»:
> m <- lars(x,y,"lasso",trace=T)
LASSO sequence
Computing X'X ....
LARS Step 1 : Variable 1 added
LARS Step 2 : Variable 2 added
LARS Step 3 : Variable 4 added
LARS Step 4 : Variable 3 added
LARS Step 5 : Variable 5 added
Il ajoute les deux variables corrélées au modèle au cours des deux premières étapes. C'est l'opposé de ce que j'ai lu dans plusieurs articles. La plupart disent alors que s'il existe un groupe de variables parmi lesquelles les corrélations sont très élevées, alors le «lasso» a tendance à sélectionner une seule variable du groupe au hasard.
Quelqu'un peut-il donner un exemple de ce comportement? Ou expliquez pourquoi mes variables x1, x2 sont ajoutées au modèle l'une après l'autre (ensemble)?
R
appel que fait l'OP et la sortie associée qu'il fournit, vous verrez qu'il utilise effectivement le lasso. Comme je suis sûr que vous le savez, un petit ajustement de l'algorithme lars donne le chemin de régularisation du lasso.Réponses:
Le problème de colinéarité est bien surévalué!
Thomas, vous avez articulé un point de vue commun, à savoir que si les prédicteurs sont corrélés, même la meilleure technique de sélection de variables en choisit une au hasard dans le groupe. Heureusement, cela sous-estime la capacité de la régression à découvrir la vérité! Si vous avez le bon type de variables explicatives (exogènes), la régression multiple promet de trouver l'effet de chaque variable en maintenant les autres constantes. Maintenant, si les variables sont parfaitement corrélées, cela est littéralement impossible. Si les variables sont corrélées, cela peut être plus difficile, mais avec la taille de l'ensemble de données typique aujourd'hui, ce n'est pas beaucoup plus difficile.
La colinéarité est un problème de faible information. Jetez un œil à cette parodie de colinéarité par Art Goldberger sur le blog de Dave Giles . La façon dont nous parlons de colinéarité semblerait idiote si elle était appliquée à une moyenne au lieu d'un coefficient de régression partielle.
Toujours pas convaincu? Il est temps pour un code.
J'ai créé des variables hautement corrélées x1 et x2, mais vous pouvez voir dans le graphique ci-dessous que lorsque x1 est proche de -1, nous constatons toujours une variabilité dans x2.
Il est maintenant temps d'ajouter la "vérité":
La régression ordinaire peut-elle réussir au milieu du puissant problème de colinéarité?
Oh oui ça peut:
Maintenant, je n'ai pas parlé de LASSO, sur lequel votre question portait. Mais laissez-moi vous demander ceci. Si la régression à l'ancienne avec élimination en arrière ne se laisse pas berner par la colinéarité, pourquoi pensez-vous que LASSO à la pointe de la technologie le ferait?
la source
La réponse de Ben m'a inspiré à aller un peu plus loin sur le chemin qu'il a fourni, que se passera-t-il si la "vérité", oui, se trouve dans d'autres situations.
Dans l'exemple d'origine, y dépend des deux variables hautement corrélées x1 et x2. En supposant qu'il existe une autre variable, x3, disons
La "vérité" y est maintenant définie comme suit
Qu'arriverait-il à la régression?
Il existe un fort effet de colinéarité. L'erreur standard de x2 est trop grande. Cependant, la régression linéaire identifie x2 comme une variable non significative.
Et un autre cas de régression?
La variable x2 n'est pas significative et il est recommandé de la supprimer par la régression linéaire.
D'après les résultats ci-dessus, la colinéarité n'est pas un problème dans la régression linéaire, et la vérification de VIF n'est pas très utile.
Regardons une autre situation. x3 = c (1: N) # N est défini précédemment, N = 1000, x3 n'est pas à la même échelle que x1.
La "vérité" y est définie comme ci-dessus
Qu'arriverait-il à la régression?
Il existe un fort effet de colinéarité. Les erreurs standard de x1, x2 sont trop importantes. La régression linéaire ne parvient pas à identifier la variable importante x1.
Et un autre cas de régression?
La variable x2 n'est pas significative et il est recommandé de la supprimer par la régression linéaire.
Remarque: la régression de y sur x1 et x3. Notez que l'erreur standard de x1 n'est que de 0,03.
Sur la base des résultats ci-dessus, ma conclusion est que
la source