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)?
R
ligaçã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.Respostas:
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.
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.
Agora é hora de adicionar a "verdade":
A regressão comum pode ter sucesso em meio ao poderoso problema de colinearidade?
Ah sim, pode:
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?
fonte
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
A "verdade" y é agora definida como a seguir
O que aconteceria com a regressão?
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.
E quanto a outro caso de regressão?
A variável x2 não é significativa e recomenda-se a remoção pela regressão linear.
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
O que aconteceria com a regressão?
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.
E quanto a outro caso de regressão?
A variável x2 não é significativa e recomenda-se a remoção pela regressão linear.
Nota: a regressão de y em x1 e x3. Observe que o erro padrão de x1 é apenas 0,03.
Com base nos resultados acima, minha conclusão é que
fonte