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, Var9
primeiro (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 Score
variável. De preferência, esse seria um método que leva em consideração o forte potencial de colinearidade nessas 9 variáveis.
Score
variá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.Respostas:
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.
fonte
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.
fonte
and put summary scores into the model
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
l0ara
pacote permite fazer isso em combinação com uma penalidade de L0; para oL0Learn
pacote, isso será suportado em breve.fonte