Estoy usando el paquete 'lars' en R con el siguiente código:
> 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 .....
Tengo un conjunto de datos con 5 variables continuas y estoy tratando de ajustar un modelo a una sola variable (dependiente) y. Dos de mis predictores están altamente correlacionados entre sí (x1, x2).
Como puede ver en el ejemplo anterior, la función lars con la opción 'paso a paso' primero elige la variable que está más correlacionada con y. La siguiente variable para ingresar al modelo es la que está más correlacionada con los residuos. De hecho, es 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
Ahora, si hago la opción 'lazo':
> 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
Agrega las dos variables correlacionadas al modelo en los primeros dos pasos. Esto es lo contrario de lo que leí en varios periódicos. La mayoría dice que si hay un grupo de variables entre las cuales las correlaciones son muy altas, entonces el 'lazo' tiende a seleccionar al azar solo una variable del grupo.
¿Alguien puede dar un ejemplo de este comportamiento? O explique, ¿por qué mis variables x1, x2 se agregan al modelo una tras otra (juntas)?
R
llamada que realiza el OP y la salida asociada que proporciona, verá que, de hecho, está utilizando el lazo. Como estoy seguro de que sabe, un pequeño ajuste del algoritmo lars produce la ruta de regularización del lazo.