Como lidar com a multicolinearidade ao realizar a seleção de variáveis?

28

Eu tenho um conjunto de dados com 9 variáveis ​​independentes contínuas. Estou tentando selecionar entre essas variáveis ​​para ajustar um modelo a uma única variável percentual (dependente) Score. Infelizmente, eu sei que haverá uma colinearidade séria entre várias das variáveis.

Eu tentei usar a stepAIC()função em R para seleção de variáveis, mas esse método, estranhamente, parece sensível à ordem em que as variáveis ​​estão listadas na equação ...

Aqui está o meu código R (porque são dados percentuais, eu uso uma transformação de logit para Score):

library(MASS)
library(car)

data.tst = read.table("data.txt",header=T)
data.lm = lm(logit(Score) ~ Var1 + Var2 + Var3 + Var4 + Var5 + Var6 + Var7 +
             Var8 + Var9, data = data.tst)

step = stepAIC(data.lm, direction="both")
summary(step)

Por alguma razão, descobri que as variáveis ​​listadas no início da equação acabam sendo selecionadas pela stepAIC()função, e o resultado pode ser manipulado pela listagem, por exemplo, Var9primeiro (após o til).

Qual é a maneira mais eficaz (e menos controversa) de ajustar um modelo aqui? Na verdade, não estou decidido a usar a regressão linear: a única coisa que quero é ser capaz de entender qual das 9 variáveis ​​está realmente impulsionando a variação na Scorevariável. De preferência, esse seria um método que leva em consideração o forte potencial de colinearidade nessas 9 variáveis.

Julie
fonte
6
A colinearidade vai significar, no entanto, você faz a análise, que é essencialmente impossível determinar se uma variável está 'dirigindo' a variação mais ou menos do que uma variável com a qual ela é altamente colinear. Tendo essa limitação em mente, você pode tentar o laço como um meio de selecionar um pequeno número de variáveis ​​que prevêem de maneira ideal e, em seguida, relatar o conjunto de variáveis ​​que ele seleciona e aquelas com as quais esse conjunto é altamente colinear. O laço agrupado é outra opção.
guest
4
@ convidado: O laço não funciona particularmente bem na presença de forte colinearidade, especialmente no que diz respeito ao problema de seleção de modelos.
cardeal
2
@ cardinal, o laço funciona bem, mas se várias variáveis ​​estiverem correlacionadas, tenderá a selecionar apenas uma delas, e é por isso que sugeri olhar para o conjunto de variáveis ​​altamente colineares. Decidir usar algo mais complexo que esse 'padrão' exigiria uma avaliação da utilidade e uma noção mais forte do objetivo desse modelo.
guest
2
Você pode procurar na função bicreg {package BMA}. Observe que você precisa de um conjunto de dados de casos completos para que ele funcione corretamente. Acho extremamente útil para a seleção de modelos.
Dominic Comtois
1
@ Guest: Bem, isso depende muito da maneira como o parâmetro de regularização é selecionado. Na verdade, em certos regimes, o laço tem uma tendência (comprovável) a selecionar parâmetros demais . O OP perguntou "a única coisa que eu quero é ser capaz de entender em qual das 9 variáveis ​​está realmente impulsionando a variação na Scorevariável", que é a frase na qual eu talvez tenha me concentrado demais. Na presença de forte colinearidade, o laço não ajudará nisso, pelo menos em interpretações mais estritas da observação do OP.
cardeal

Respostas:

14

Primeiro, um recurso muito bom para esse problema é T. Keith, Regressão Múltipla e Além. Há muito material no livro sobre modelagem de caminhos e seleção de variáveis ​​e acho que você encontrará respostas exaustivas para suas perguntas lá.

Uma maneira de abordar a multicolinearidade é centralizar os preditores, ou seja, subtrair a média de uma série de cada valor. A regressão de Ridge também pode ser usada quando os dados são altamente colineares. Finalmente, a regressão seqüencial pode ajudar a entender as relações de causa-efeito entre os preditores, em conjunto com a análise da sequência temporal dos eventos preditores.

Todas as 9 variáveis ​​mostram colinearidade? Para o diagnóstico, você pode usar o fator de inflação da variação de Cohen 2003. Um valor VIF> = 10 indica alta colinearidade e erros padrão inflados. Entendo que você está mais interessado na relação causa-efeito entre preditores e resultados. Caso contrário, a multicolinearidade não é considerada um problema sério de previsão, como você pode confirmar verificando o MAE de dados fora da amostra em relação aos modelos criados, adicionando seus preditores um de cada vez. Se seus preditores tiverem um poder de previsão marginal, você descobrirá que o MAE diminui mesmo na presença de multicolinearidade do modelo.

Robert Kubrick
fonte
16

Como é muito difícil determinar quais variáveis ​​serão descartadas, geralmente é melhor não descartá-las. Duas maneiras de prosseguir nessa linha são (1) usar um método de redução de dados (por exemplo, agrupamento de variáveis ​​ou componentes principais) e colocar pontuações resumidas no modelo em vez de variáveis ​​individuais e (2) colocar todas as variáveis ​​no modelo, mas não testar pelo efeito de uma variável ajustada pelos efeitos das variáveis ​​concorrentes. Em (2), os testes de chunk de variáveis ​​concorrentes são poderosos, porque variáveis ​​colineares unem forças no teste geral de associação de vários graus de liberdade, em vez de competir entre si como quando você testa variáveis ​​individualmente.

Frank Harrell
fonte
poderia yoi por favor, basta explicarand put summary scores into the model
SIslam
1
As anotações do meu curso em biostat.mc.vanderbilt.edu/rms são detalhadas
Frank Harrell
1

Se você deseja realizar uma seleção variável na presença de alta colinearidade, posso recomendar o pacote l0ara , que se encaixa penalizados por L0 usando um procedimento de crista adaptativa iterativo . Como esse método se baseia, em última análise, na regressão regularizada das cordilheiras, ele pode lidar muito bem com a colinearidade e, nas minhas simulações, produziu muito menos falsos positivos, ao mesmo tempo em que oferece ótimo desempenho de previsão, em comparação com, por exemplo, LASSO, rede elástica ou LASSO adaptável. Como alternativa, você também pode experimentar o pacote L0Learncom uma combinação de uma penalidade de L0 e L2. A penalidade de L0 favorece a escarsidade (ou seja, modelos pequenos), enquanto a penalidade de L2 regulariza a colinearidade. A rede elástica (que usa uma combinação de uma penalidade de L1 e L2) também é frequentemente sugerida, mas nos meus testes isso produziu muito mais falsos positivos, mais os coeficientes serão fortemente tendenciosos. Esse viés pode ser eliminado se você usar métodos penalizados por L0 (também conhecido como melhor subconjunto) - é o chamado estimador de oráculos, que simultaneamente obtém coeficientes de parâmetros consistentes e imparciais. Os parâmetros de regularização em todos esses métodos precisam ser otimizados por meio de validação cruzada para oferecer um ótimo desempenho de previsão fora da amostra. Se você também deseja obter níveis de significância e intervalos de confiança em seus parâmetros, também pode fazer isso através de bootstrapping não paramétrico.

O algoritmo de crista adaptativa iterativa de l0ara(às vezes chamado de crista adaptativa quebrada), como rede elástica, possui um efeito de agrupamento, o que fará com que selecione variáveis ​​altamente correlacionadas em grupos assim que eles entrarem no seu modelo. Isso faz sentido - por exemplo, se você tivesse duas variáveis ​​quase colineares em seu modelo, isso dividiria o efeito igualmente sobre ambas.

Se você está analisando dados de proporção, é melhor usar um modelo de regressão logística btw - o l0arapacote permite fazer isso em combinação com uma penalidade de L0; para o L0Learnpacote, isso será suportado em breve.

Tom Wenseleers
fonte