Quando o LASSO seleciona preditores correlacionados?

13

Estou usando o pacote 'lars' em R com o seguinte 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 .....

Eu tenho um conjunto de dados com 5 variáveis ​​contínuas e estou tentando ajustar um modelo a uma única variável (dependente) y. Dois dos meus preditores estão altamente correlacionados entre si (x1, x2).

Como você pode ver no exemplo acima, a função lars com a opção 'stepwise' primeiro escolhe a variável que está mais correlacionada com y. A próxima variável a entrar no modelo é a que mais se correlaciona com os resíduos. De fato, é 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  

Agora, se eu fizer a opção 'laço':

> 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

Ele adiciona as duas variáveis ​​correlacionadas ao modelo nas duas primeiras etapas. É o contrário do que li em vários artigos. A maioria das pessoas diz que, se houver um grupo de variáveis ​​entre as quais as correlações são muito altas, o 'laço' tende a selecionar apenas uma variável do grupo aleatoriamente.

Alguém pode fornecer um exemplo desse comportamento? Ou explique, por que minhas variáveis ​​x1, x2 são adicionadas ao modelo uma após a outra (juntas)?

ThomasH_MB
fonte
Esta é a regressão de menor ângulo que fornece uma explicação dos passos do laço.
Michael R. Chernick
@ MichaelChernick: Se você olhar para a Rligação que o OP está fazendo e a saída associada que ele fornece, verá que ele está realmente usando o laço. Como eu tenho certeza que você sabe, um pequeno ajuste no algoritmo lars produz o caminho de regularização do laço.
cardeal
Meu "palpite" é que, como x2 inclui 4 unidades de x1, x1 e x2 combinadas, na verdade, têm a maior variação (9 unidades). Se você reduzir o coeficiente de x2 para 2, verá que x4 está selecionado antes de x1 e x2.
Você pode fornecer algumas referências para a prova dessa "aleatoriedade"? Obrigado.
Ziyuang
Eu acho que você pode encontrar sua resposta neste artigo: arxiv.org/pdf/1204.1605.pdf
TPArrow

Respostas:

15

O problema da colinearidade é superestimado!

Thomas, você articulou um ponto de vista comum, de que, se os preditores são correlacionados, até a melhor técnica de seleção de variáveis ​​escolhe apenas um aleatoriamente. Felizmente, essa é a maneira de subestimar a capacidade da regressão de descobrir a verdade! Se você tem o tipo certo de variáveis ​​explicativas (exógenas), a regressão múltipla promete encontrar o efeito de cada variável mantendo as outras constantes. Agora, se as variáveis ​​estão perfeitamente correlacionadas, isso é literalmente impossível. Se as variáveis ​​estiverem correlacionadas, pode ser mais difícil, mas com o tamanho do conjunto de dados típico de hoje, não é muito mais difícil.

A colinearidade é um problema de baixa informação. Veja essa paródia de colinearidade de Art Goldberger no blog de Dave Giles . A maneira como falamos sobre colinearidade soaria tola se aplicada a uma média em vez de a um coeficiente de regressão parcial.

Ainda não está convencido? Está na hora de algum código.

set.seed(34234)

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

Criei variáveis ​​altamente correlacionadas x1 e x2, mas você pode ver no gráfico abaixo que quando x1 está próximo de -1, ainda vemos variabilidade em x2. insira a descrição da imagem aqui

Agora é hora de adicionar a "verdade":

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

A regressão comum pode ter sucesso em meio ao poderoso problema de colinearidade?

summary(lm(y ~ x1 + x2))

Ah sim, pode:

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 ***

Agora eu não falei sobre o LASSO, no qual sua pergunta estava focada. Mas deixe-me perguntar uma coisa. Se a regressão da velha escola com eliminação para trás não se deixa enganar pela colinearidade, por que você acha que o LASSO de ponta seria?

Ben Ogorek
fonte
eu1
A idéia era que conceitos mais simples pudessem ser usados ​​para explicar o fenômeno descrito pelo OP e que esses conceitos não seriam fundamentalmente alterados pela adição de um termo de regularização orientado a dados.
Ben Ogorek
7

A resposta de Ben me inspirou a dar um passo adiante no caminho que ele forneceu, o que acontecerá se a "verdade", y, estiver em outras situações.

No exemplo original, y é dependente das duas variáveis ​​altamente correlacionadas x1 e x2. Supondo que haja outra variável, x3, digamos

x3 = c (1: N) / 250 # N é definido anteriormente, N = 1000, x3 está na escala semelhante a x1 e a escala de x3 afeta os resultados da regressão linear abaixo.

A "verdade" y é agora definida como a seguir

y = 0,5 * x1 - 0,7 * x3 + rnorm (N) # Processo de geração de dados

O que aconteceria com a regressão?

resumo (lm (y ~ x1 + x2))

Existe um forte efeito de colinearidade. O erro padrão de x2 é muito grande. No entanto, a regressão linear identifica x2 como uma variável não 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 

E quanto a outro caso de regressão?

resumo (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 ***

A variável x2 não é significativa e recomenda-se a remoção pela regressão linear.

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

x1       x2       x3 
9.067865 9.067884 1.000105 

A partir dos resultados acima, a colinearidade não é um problema na regressão linear e a verificação do VIF não é muito útil.

Vamos olhar para outra situação. x3 = c (1: N) # N é definido antes, N = 1000, x3 não está na mesma escala que x1.

A "verdade" y é definida da mesma forma que acima

y = 0,5 * x1 - 0,7 * x3 + rnorm (N) # Processo de geração de dados

O que aconteceria com a regressão?

resumo (lm (y ~ x1 + x2))

Existe um forte efeito de colinearidade. Os erros padrão de x1, x2 são muito grandes. A regressão linear falha ao identificar a variável importante 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 

E quanto a outro caso de regressão?

resumo (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 ***

A variável x2 não é significativa e recomenda-se a remoção pela regressão linear.

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

x1       x2       x3 
9.182507 9.184419 1.001853 

Nota: a regressão de y em x1 e x3. Observe que o erro padrão de x1 é apenas 0,03.

resumo (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 ***

Com base nos resultados acima, minha conclusão é que

  • quando as variáveis ​​preditoras estão em escalas semelhantes, a colinearidade não é um problema na regressão linear;
  • quando as variáveis ​​preditoras não estão nas escalas semelhantes,
    • quando as duas variáveis ​​altamente correlacionadas estão ambas no modelo verdadeiro, a colinearidade não é um problema;
    • quando apenas uma das duas variáveis ​​altamente correlacionadas estiver no modelo verdadeiro,
      • Se as outras variáveis ​​"verdadeiras" forem incluídas na regressão linear, a regressão linear identificará as variáveis ​​não significativas que estão correlacionadas com a variável significativa.
      • Se as outras variáveis ​​"verdadeiras" não forem incluídas na regressão linear, o problema de colinearidade é grave, resultando em inflação de erro padrão.
vtshen
fonte
Interessante, embora esses resultados assumam relações lineares entre os preditores / características ey. Eles estão longe de serem abrangentes. O que acontece se houver fortes relações não lineares em seus preditores (por exemplo, termos de interação x1 * x2, recursos da função step / dars vars (1 se x1> c para alguma constante), etc.)? Se você trabalha com dados de baixa relação sinal / ruído, como na criação de recursos para negociação algorítmica, sempre usa modelos parcimoniosos para reduzir o overfitting (porque seus sinais são fracos) para que ainda haja fortes razões para lidar com a multicolinearidade
FXQuantTrader