Sto usando il pacchetto 'lars' in R con il seguente codice:
> 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 .....
Ho un set di dati con 5 variabili continue e sto cercando di adattare un modello a una singola variabile (dipendente) y. Due dei miei predittori sono altamente correlati tra loro (x1, x2).
Come puoi vedere nell'esempio sopra, la funzione lars con l'opzione 'stepwise' sceglie prima la variabile che è più correlata con y. La variabile successiva per inserire il modello è quella più correlata ai residui. In effetti, è 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
Ora, se faccio l'opzione '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
Aggiunge entrambe le variabili correlate al modello nei primi due passaggi. Questo è l'opposto di quello che ho letto in diversi articoli. La maggior parte quindi afferma che se esiste un gruppo di variabili tra le quali le correlazioni sono molto alte, il "lazo" tende a selezionare casualmente solo una variabile dal gruppo.
Qualcuno può fornire un esempio di questo comportamento? Oppure spiega, perché le mie variabili x1, x2 vengono aggiunte al modello una dopo l'altra (insieme)?
R
chiamata che l'OP sta effettuando e l'output associato che fornisce, vedrai che sta effettivamente usando il lazo. Come sono sicuro che sai, un piccolo ritocco dell'algoritmo di Lars produce il percorso di regolarizzazione del lazo.