Quando LASSO seleziona predittori correlati?


13

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)?


Questa è la regressione dell'angolo minimo che fornisce una spiegazione dei passi del lazo.
Michael R. Chernick,

@MichaelChernick: Se guardi la Rchiamata 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.
cardinale il

La mia "ipotesi" è che, dato che x2 include 4 unità di x1, x1 e x2 combinate hanno effettivamente la maggiore varianza (9 unità). Se si abbassa il coefficiente di x2 a 2, si dovrebbe vedere che x4 è selezionato prima di x1 e x2.

Potete fornire alcuni riferimenti per la prova di quella "casualità"? Grazie.
ziyuang,

Immagino che tu possa trovare la tua risposta su questo documento: arxiv.org/pdf/1204.1605.pdf
TPArrow

Risposte:


15

Il problema della collinearità è sopravvalutato!

Thomas, hai articolato un punto di vista comune, secondo cui se i predittori sono correlati, anche la migliore tecnica di selezione delle variabili ne sceglie uno a caso. Fortunatamente, è in questo modo che sottovaluta la capacità della regressione di scoprire la verità! Se hai il giusto tipo di variabili esplicative (esogene), la regressione multipla promette di trovare l'effetto di ogni variabile mantenendo le altre costanti. Ora, se le variabili sono perfettamente correlate, allora questo è letteralmente impossibile. Se le variabili sono correlate, potrebbe essere più difficile, ma con le dimensioni del set di dati tipico oggi, non è molto più difficile.

La collinearità è un problema di scarsa informazione. Dai un'occhiata a questa parodia della collinearità di Art Goldberger sul blog di Dave Giles . Il modo in cui parliamo di collinearità sembrerebbe sciocco se applicato a una media anziché a un coefficiente di regressione parziale.

Non sei ancora convinto? È tempo per un po 'di codice.

set.seed(34234)

N <- 1000
x1 <- rnorm(N)
x2 <- 2*x1 + .7 * rnorm(N)
cor(x1, x2) # correlation is .94
plot(x2 ~ x1)

Ho creato variabili altamente correlate x1 e x2, ma nella trama sotto puoi vedere che quando x1 è vicino a -1, vediamo ancora la variabilità in x2. inserisci qui la descrizione dell'immagine

Ora è il momento di aggiungere la "verità":

y <- .5 * x1 - .7 * x2 + rnorm(N) # Data Generating Process

La regressione ordinaria può avere successo nel potente problema della collinearità?

summary(lm(y ~ x1 + x2))

Oh sì, può:

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.0005334  0.0312637  -0.017    0.986    
x1           0.6376689  0.0927472   6.875 1.09e-11 ***
x2          -0.7530805  0.0444443 -16.944  < 2e-16 ***

Ora non ho parlato di LASSO, su cui la tua domanda si è concentrata. Ma lascia che ti chieda questo. Se la regressione della vecchia scuola con l'eliminazione all'indietro non viene ingannata dalla collinearità, perché penseresti che LASSO sia all'avanguardia?


Per il tuo ultimo punto, mentre OLS è rotazionalmente equivalente, non mi aspetto la stessa proprietà da LASSO a causa della norma . Se LASSO è elegante o no non è probabilmente rilevante. L1
steveo'america,

L'idea era che concetti più semplici potessero essere usati per spiegare il fenomeno descritto da OP e che questi concetti non fossero sostanzialmente alterati dall'aggiunta di un termine di regolarizzazione basato sui dati.
Ben Ogorek,

7

La risposta di Ben mi ha ispirato a fare un passo avanti nel percorso che ha fornito, cosa accadrà se la "verità", y, si trova in altre situazioni.

Nell'esempio originale, y dipende dalle due variabili altamente correlate x1 e x2. Supponendo che ci sia un'altra variabile, diciamo x3

x3 = c (1: N) / 250 # N è stato definito prima, N = 1000, x3 è nella scala simile a x1 e la scala di x3 ha effetti sui risultati della regressione lineare di seguito.

La "verità" y è ora definita come segue

y = .5 * x1 - .7 * x3 + rnorm (N) # Processo di generazione dei dati

Cosa accadrebbe alla regressione?

sommario (lm (y ~ x1 + x2))

Esiste un forte effetto di collinearità. L'errore standard di x2 è troppo grande. Tuttavia, la regressione lineare identifica x2 come una variabile non significativa.

     Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.39164    0.04172 -33.354  < 2e-16 ***
x1           0.65329    0.12550   5.205 2.35e-07 ***
x2          -0.07878    0.05848  -1.347    0.178 

vif (lm (y ~ x1 + x2))

x1       x2 
9.167429 9.167429 

Che dire di un altro caso di regressione?

sommario (lm (y ~ x1 + x2 + x3))

Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.02100    0.06573   0.319    0.749    
x1           0.55398    0.09880   5.607 2.67e-08 ***
x2          -0.02966    0.04604  -0.644    0.520    
x3          -0.70562    0.02845 -24.805  < 2e-16 ***

La variabile x2 non è significativa e si consiglia di essere rimossa dalla regressione lineare.

vif (lm (y ~ x1 + x2 + x3))

x1       x2       x3 
9.067865 9.067884 1.000105 

Dai risultati di cui sopra, la collinearità non è un problema nella regressione lineare e il controllo della VIF non è molto utile.

Diamo un'occhiata a un'altra situazione. x3 = c (1: N) # N è stato definito prima, N = 1000, x3 non è nella stessa scala di x1.

La "verità" y è definita come sopra

y = .5 * x1 - .7 * x3 + rnorm (N) # Processo di generazione dei dati

Cosa accadrebbe alla regressione?

sommario (lm (y ~ x1 + x2))

Esiste un forte effetto di collinearità. Gli errori standard di x1, x2 sono troppo grandi. La regressione lineare non riesce a identificare l'importante variabile x1.

   Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept) -350.347      6.395 -54.783   <2e-16 ***
x1            25.207     19.237   1.310    0.190    
x2           -12.212      8.963  -1.362    0.173  

vif (lm (y ~ x1 + x2))

    x1       x2 
9.167429 9.167429 

Che dire di un altro caso di regressione?

sommario (lm (y ~ x1 + x2 + x3))

Coefficients:
          Estimate Std. Error   t value Pr(>|t|)    
(Intercept)  0.0360104  0.0610405     0.590    0.555    
x1           0.5742955  0.0917555     6.259 5.75e-10 ***
x2          -0.0277623  0.0427585    -0.649    0.516    
x3          -0.7000676  0.0001057 -6625.170  < 2e-16 ***

La variabile x2 non è significativa e si consiglia di essere rimossa dalla regressione lineare.

vif (lm (y ~ x1 + x2 + x3))

x1       x2       x3 
9.182507 9.184419 1.001853 

Nota: la regressione di y su x1 e x3. Si noti che l'errore standard di x1 è solo 0,03.

sommario (lm (y ~ x1 + x3))

Coefficients:
              Estimate Std. Error   t value Pr(>|t|)    
(Intercept) -0.1595528  0.0647908    -2.463    0.014 *  
x1           0.4871557  0.0321623    15.147   <2e-16 ***
x3          -0.6997853  0.0001121 -6240.617   <2e-16 ***

Sulla base dei risultati di cui sopra, la mia conclusione è che

  • quando le variabili predittive sono nelle scale simili, la collinearità non è un problema nella regressione lineare;
  • quando le variabili predittive non si trovano nelle scale simili,
    • quando le due variabili altamente correlate sono entrambe nel modello vero, la collinearità non è un problema;
    • quando solo una delle due variabili altamente correlate è nel modello vero,
      • Se le altre variabili "vere" sono incluse nella regressione lineare, la regressione lineare identificherà le variabili non significative correlate alla variabile significativa.
      • Se le altre variabili "vere" non sono incluse nella regressione lineare, il problema della collinearità è grave, con conseguente inflazione di errore standard.

Interessante, sebbene questi risultati assumano relazioni lineari tra predittori / caratteristiche e y. Sono tutt'altro che esaustivi. Cosa succede se ci sono forti relazioni non lineari nei tuoi predittori (ad es. Termini di interazione x1 * x2, funzioni della funzione passo / vars fittizi (1 se x1> c per alcune costanti), ecc.)? Se lavori con dati a basso rapporto segnale / rumore, come nella creazione di funzionalità per il trading algoritmico, hai sempre modelli parsimoniosi per ridurre il sovra-adattamento (perché i tuoi segnali sono deboli), quindi ci sono ancora
validi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.