Eu gostaria de implementar um algoritmo para seleção automática de modelo. Estou pensando em fazer regressão gradual, mas qualquer coisa serve (porém, deve ser baseada em regressões lineares).
Meu problema é que não consigo encontrar uma metodologia ou uma implementação de código aberto (estou trabalhando em java). A metodologia que tenho em mente seria algo como:
- calcular a matriz de correlação de todos os fatores
- escolha os fatores que têm uma baixa correlação entre si
- remova os fatores que têm um status t baixo
- adicione outros fatores (ainda com base no baixo fator de correlação encontrado em 2.).
- reiterar várias vezes até que algum critério (por exemplo, AIC) esteja acima de um determinado limite ou não consiga ou não consigamos encontrar um valor maior.
Sei que existe uma implementação R para isso (stepAIC), mas acho o código bastante difícil de entender. Também não consegui encontrar artigos descrevendo a regressão gradual.
Respostas:
Eu acho que essa abordagem está errada, mas talvez seja mais útil se eu explicar o porquê. É desejável conhecer o melhor modelo, com algumas informações sobre um grande número de variáveis. Além disso, é uma situação em que as pessoas parecem se encontrar regularmente. Além disso, muitos livros (e cursos) sobre regressão abrangem métodos de seleção passo a passo, o que implica que eles devem ser legítimos. Infelizmente, porém, eles não são, e o emparelhamento dessa situação e objetivo é bastante difícil de navegar com êxito. A seguir, é apresentada uma lista de problemas com os procedimentos automatizados de seleção de modelos por etapas (atribuídos a Frank Harrell e copiados daqui ):
A questão é: o que há de tão ruim nesses procedimentos / por que esses problemas ocorrem? A maioria das pessoas que fez um curso básico de regressão está familiarizada com o conceito de regressão à média , então é isso que eu uso para explicar essas questões. (Embora isso possa parecer fora de tópico a princípio, aceite comigo, eu prometo que é relevante.)
Imagine um treinador de atletismo no primeiro dia de testes. Trinta crianças aparecem. Essas crianças têm algum nível subjacente de capacidade intrínseca à qual nem o treinador, nem ninguém mais, tem acesso direto. Como resultado, o treinador faz a única coisa que ele pode fazer, ou seja, fazer todos correrem 100m. Presumivelmente, os tempos são uma medida de sua capacidade intrínseca e são tomados como tal. No entanto, eles são probabilísticos; alguma proporção de quão bem alguém se sai é baseada em sua capacidade real e outra é aleatória. Imagine que a verdadeira situação é a seguinte:
Os resultados da primeira corrida são exibidos na figura a seguir, juntamente com os comentários do treinador para as crianças.
Observe que a divisão das crianças pelo tempo de corrida deixa sobreposições em sua capacidade intrínseca - esse fato é crucial. Depois de elogiar alguns e gritar com outros (como os treinadores costumam fazer), ele os faz correr novamente. Aqui estão os resultados da segunda corrida com as reações do treinador (simuladas a partir do mesmo modelo acima):
Observe que sua capacidade intrínseca é idêntica, mas os tempos mudaram em relação à primeira corrida. Do ponto de vista do treinador, aqueles que ele gritava tendem a melhorar e aqueles que ele elogiava costumavam piorar (eu adaptei este exemplo concreto da citação de Kahneman listada na página da wiki), embora na verdade a regressão à média seja uma matemática simples conseqüência do fato de o treinador selecionar atletas para a equipe com base em uma medida parcialmente aleatória.
Agora, o que isso tem a ver com técnicas de seleção de modelo automatizadas (por exemplo, passo a passo)? O desenvolvimento e a confirmação de um modelo baseado no mesmo conjunto de dados às vezes é chamado de dragagem de dados. Embora exista alguma relação subjacente entre as variáveis, e espera-se que relações mais fortes produzam pontuações mais fortes (por exemplo, estatísticas t mais altas), essas são variáveis aleatórias e os valores realizados contêm erros. Portanto, quando você seleciona variáveis com base em valores realizados mais altos (ou mais baixos), eles podem ser assim devido ao seu valor verdadeiro subjacente, erro ou ambos. Se você proceder dessa maneira, ficará tão surpreso quanto o treinador ficou após a segunda corrida. Isso é verdade se você seleciona variáveis com base em estatísticas t altas ou intercorrelações baixas. É verdade que usar o AIC é melhor do que usar valores-p, porque penaliza o modelo por complexidade, mas o AIC é uma variável aleatória (se você executar um estudo várias vezes e se encaixar no mesmo modelo, o AIC se movimentará exatamente como todo o resto). Infelizmente,
Espero que isto seja útil.
fonte
Confira o pacote de sinal de intercalação em R. Isso o ajudará a validar cruzadamente modelos de regressão passo a passo (use
method='lmStepAIC'
oumethod='glmStepAIC'
) e pode ajudar a entender como esses tipos de modelos tendem a ter desempenho preditivo ruim. Além disso, você pode usar afindCorrelation
função no cursor para identificar e eliminar variáveis colineares, e arfe
função no cursor para eliminar variáveis com uma estatística t baixa (usorfeControl=rfeControl(functions=lmFuncs)
).No entanto, como mencionado nas respostas anteriores, é provável que esses métodos de seleção de variáveis causem problemas, principalmente se você os fizer iterativamente. Certifique-se de avaliar seu desempenho em um conjunto de testes COMPLETAMENTE realizado. Nem olhe para o conjunto de testes até estar satisfeito com seu algoritmo!
Por fim, pode ser melhor (e mais simples) usar o modelo preditivo com a seleção de recursos "embutidos", como regressão de crista, laço ou rede elástica. Especificamente, tente o
method=glmnet
argumento para acento circunflexo e compare a precisão com validação cruzada desse modelo com omethod=lmStepAIC
argumento. Meu palpite é que o primeiro oferecerá uma precisão fora da amostra muito maior e você não precisa se preocupar em implementar e validar seu algoritmo de seleção de variável personalizado.fonte
r
oupython
? Eu adoraria experimentar.Concordo plenamente com os problemas descritos pelo @gung. Dito isto, realisticamente falando, a seleção de modelos é um problema real que precisa de uma solução real. Aqui está algo que eu usaria na prática.
Para um exemplo do uso desse método no mundo real, acredito que ele foi usado na competição do Prêmio Netflix.
fonte
Para responder à pergunta, existem várias opções: 1) todo o subconjunto pelo AIC / BIC 2) passo a passo pelo valor p 3) passo a passo pelo AIC / BIC 4) regularização como o LASSO (pode ser baseado no AIC / BIC ou no CV 5) algoritmo genético (GA) 6) outros? 7) uso de seleção não automática, orientada pela teoria ("conhecimento do assunto")
A próxima pergunta seria qual método é melhor. Este artigo (doi: 10.1016 / j.amc.2013.05.016) indica que "toda regressão possível" deu os mesmos resultados ao novo método proposto e, passo a passo, é pior. Um GA simples está entre eles. Este artigo (DOI: 10.1080 / 10618600.1998.10474784) compara a regressão penalizada (Bridge, Lasso etc.) com "trancos e barrancos" (parece um algoritmo de pesquisa exaustivo, mas mais rápido) e também descobriu que "o modelo de ponte concorda com o melhor modelo de a seleção de subconjuntos pelo método dos trancos e barrancos ”. Este artigo (doi: 10.1186 / 1471-2105-15-88) mostra que o GA é melhor que o LASSO. Este artigo (DOI: 10.1198 / jcgs.2009.06164) propôs um método - essencialmente uma abordagem de todos os subconjuntos (com base no BIC), mas reduz de forma inteligente o tempo de computação. Eles demonstram que esse método é melhor que o LASSO. Curiosamente, este artigo (DOI: 10.1111 / j.1461-0248.2009.01361.
Então, no geral, os resultados são variados, mas tive a impressão de que o GA parece muito bom, embora por etapas possa não ser tão ruim e rápido.
Quanto a 7), o uso de seleção não automática, orientada pela teoria ("conhecimento do assunto"). É demorado e não é necessariamente melhor que o método automático. De fato, na literatura de séries temporais, está bem estabelecido que o método automatizado (especialmente software comercial) supera os especialistas humanos "por uma margem substancial" (doi: 10.1016 / S0169-2070 (01) 00119-4, página 561, por exemplo, selecionando várias suavizações exponenciais) e modelos ARIMA).
fonte
Aqui está uma resposta fora do campo esquerdo - em vez de usar regressão linear, use uma árvore de regressão (pacote rpart). Isso é adequado para a seleção automática de modelo, porque com um pouco de trabalho você pode automatizar a seleção de cp, o parâmetro usado para evitar o excesso de ajuste.
fonte
modelo linear pode ser otimizado através da implementação de algoritmo genético na maneira de escolher as variáveis independentes mais valiosas. As variáveis são representadas como genes no algoritmo, e o melhor cromossomo (conjunto de genes) é então selecionado após operadores de crossover, mutação etc. É baseado na seleção natural - então a melhor 'geração' pode sobreviver, em outras palavras, o algoritmo otimiza a função de estimativa que depende do modelo específico.
fonte
Nós temos uma função no pacote de estatísticas básicas do R, chamada step (), que faz a seleção para frente, para trás ou para trás dos modelos com base na menor AIC. Isso também funciona para variáveis fatoriais. Isso não serve o objetivo aqui?
fonte
Vejo que minha pergunta gerou muito interesse e um debate interessante sobre a validade da abordagem de seleção automática de modelo. Embora eu concorde que tomar como certo o resultado de uma seleção automática é arriscado, ele pode ser usado como ponto de partida. Então, aqui está como eu o implementei para o meu problema específico, que é encontrar os melhores n fatores para explicar uma determinada variável
Novamente, isso é muito difícil, pode haver maneiras de melhorar a metodologia, mas esse é o meu ponto de partida. Estou postando esta resposta esperando que possa ser útil para outra pessoa. Comentários são bem-vindos!
fonte