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.