Como fazer a seleção de subconjuntos de regressão logística?

47

Estou ajustando uma família binomial de glm em R, e tenho um grupo inteiro de variáveis ​​explicativas, e preciso encontrar o melhor (R ao quadrado, se uma medida for boa). Antes de escrever um script para percorrer diferentes combinações aleatórias das variáveis ​​explicativas e depois gravar qual é o melhor, eu realmente não sei o que fazer. E a leapsfunção de pulos de pacotes não parece fazer regressão logística.

Qualquer ajuda ou sugestão seria muito apreciada.

Leendert
fonte
Existem funções que realizam a pesquisa automática. Você deve dar uma olhada na função step . Seção 5.4 ilustra esse ponto: data.princeton.edu/R/glms.html
Ocram
Sinto muito, mas minha postagem foi editada para que não faça mais a minha pergunta. Eu tenho 35 (26 significativas) variáveis ​​explicativas em meu modelo de regressão logística. Preciso da melhor combinação possível de 8, não do melhor subconjunto, e em nenhum momento eu estava interessado em uma abordagem gradual ou em todos os subconjuntos. Não há espaço de manobra neste 8. Eu apenas pensei que alguém poderia saber como eu poderia encaixar todas as combinações de 8 variáveis ​​explicativas e isso poderia me dizer o que maximiza a probabilidade (desculpe pelo peido do cérebro R-quadrado, mas o AIC também não é relevante, pois Eu tenho um número fixo de parâmetros, 8).
precisa
Você pode reverter para a versão anterior da sua postagem ou combinar as duas edições. Tenho certeza de que o @mpiktas foi de boa intenção ao tentar melhorar sua aparência e simplesmente não percebeu os parâmetros de número.
chl
@ Todo mundo: Muito obrigado. No final, usei muitas coisas diferentes na esperança de que todas dessem respostas semelhantes. E eles fizeram. Usei os pacotes BMA, bestglm e glmnet, bem como a função step. Modelos equipados com todos eles, e não houve discrepância no que BMA com maxcol = 9 e etapa considerada o melhor modelo. Todos os especialistas da área ao meu redor pareciam muito satisfeitos com as variáveis ​​e achavam que era bastante progressivo. Então, obrigado por toda a entrada. Eu realmente usei tudo.
precisa
glmulti também é um pacote bom para melhor seleção subconjunto, e que um permite que você especifique o nr máximo de variáveis no modelo, e também permite que se considere todos os possíveis efeitos de 1ª ordem de interação
Tom Wenseleers

Respostas:

28

Métodos passo a passo e "todos os subconjuntos" geralmente são ruins. Consulte Parando Stepwise: Por que os métodos Stepwise são ruins e o que você deve usar por David Cassell e por mim (usamos SAS, mas a lição se aplica) ou Estratégias de modelagem de regressão de Frank Harrell. Se você precisar de um método automático, recomendo o LASSO ou o LAR. Um pacote LASSO para regressão logística está disponível aqui , outro artigo interessante é sobre o LASSO iterado para logística

Peter Flom - Restabelece Monica
fonte
6
(+1) Sobre os pacotes R, também há glmnet (implementação com algo de descida de coordenadas., Friedman e coll.) E penalizado (permite manter alguns var. Não-penalizados). É importante notar que F. Harrell fornece uma estimativa penalizada de ML para GLMs (consulte lrmseu livro RMS para obter mais informações).
chl
(+1) Bom artigo, parece que tenho que começar a ir muito além dos estados dos autores na pergunta (não a primeira vez que não fiz). @chl (+1) também oferece sugestões alternativas perfeitas.
Dmitrij Celov
@chl: +1 para glmnet, esse é um ótimo pacote.
Zach
1
@chl Obrigado! Um dos problemas com o R é acompanhar os pacotes (são muitos!) E quais são os melhores. As exibições de tarefas ajudam
Peter Flom - Restabelece Monica
2
Se as suas variáveis são colineares é melhor usar rede elástica usando glmnet, dizer com alfa = 0,5, como LASSO tende a chutar aleatoriamente variáveis altamente colineares fora do modelo
Tom Wenseleers
15

Antes de tudo, não é uma medida de qualidade de ajuste apropriada para regressão logística; use um critério de informação ou , por exemplo, como uma boa alternativa.R2AICBIC

A regressão logística é estimada pelo método da máxima verossimilhança, portanto, leapsnão é usada diretamente aqui. Uma extensão de leapsto glm()functions é o pacote bestglm (como geralmente segue a recomendação, consulte as vinhetas).

Você pode também estar interessado no artigo de David W. Hosmer, Borko Jovanovic e Stanley Lemeshow Best Subsets Regression Logistic // Biometrics Vol. 45, n. 4 (dezembro de 1989), pp. 1265-1270 (geralmente acessível através das redes da universidade).

Dmitrij Celov
fonte
2
Embora seu comentário sobre seja pior que o é útil em geral, na verdade não faz diferença, a menos que você esteja comparando modelos de tamanhos diferentes. O OP afirma claramente que eles têm interesse apenas em modelos variáveis, de modo que o e o voltarão a escolher o modelo com a maior probabilidade. Isso é equivalente ao encaixe . B I C , A I C 8 B I C A I C R 2R2BIC,AIC8BICAICR2
probabilityislogic
Obrigado pela observação, mas os comentários de chl abaixo explicam por que um número fixo de variáveis ​​explicativas é perigoso. A propósito, a resposta apareceu antes do comentário sobre (até?) Variáveis ​​rstriction;) #8
Dmitrij Celov
qualquer referência acadêmica paraR2R2 is not an appropriate goodness-of-fit measure for logistic regression take an information criterion AICAIC or BICBIC
SIslam 23/03
uma observação bestglm, ele usa leapsno back-end para o cálculo! Portanto, falhará se houver NA no conjunto de dados e surgirá uma mensagem como Error in leaps.setup(x, y, wt = weights, nbest = nbest, nvmax = nvmax, : NA/NaN/Inf in foreign function call (arg 3) Mas o que é interessante, meu conjunto de dados não possui NA, e sim alguns zeros, no entanto, essa função reclama e fornece exatamente a mensagem acima !!
SIslam
glmnet também é uma boa, e também pode fazer modelos que consideram todos os efeitos possíveis de interação 1ª ordem
Tom Wenseleers
6

Uma idéia seria usar uma floresta aleatória e, em seguida, usar as medidas de importância variável que ele gera para escolher suas 8 melhores variáveis. Outra idéia seria usar o pacote "boruta" para repetir esse processo algumas centenas de vezes para encontrar as 8 variáveis ​​que são consistentemente mais importantes para o modelo.

Zach
fonte
@Zach Você sugere confiar nas RFs para executar a seleção de recursos e, em seguida, aplicar um GLM - nesse caso, há risco de sobreajuste ou excesso de otimismo - ou usar RFs (com medidas padrão de importância variável ou seleção totalmente relevante) como uma ferramenta autônoma?
chl
@chl: Eu estava sugerindo o uso dos RFs para realizar a seleção de recursos e depois aplicar o GLM. Concordo que há risco de excesso de ajuste, mas o OP disse que precisava exatamente de 8 variáveis.
Zach
1
@Zach "exatamente 8 variáveis" ... Então, você limita um pouco as variáveis ​​de interesse em potencial com base em uma medida de importância variável (que, devido a ser baseada em permutação e reamostragem dupla, deve ser isenta de viés) e depois os reinjete em um GLM. IMHO, você quebra o controle de sobreajuste exercido por meio de ensacamento. Isso também é descrito em ESLII de Hastie et al .: a seleção de recursos, se houver, deve ser incluída no procedimento de validação cruzada (onde a validação cruzada inclui a avaliação do desempenho do modelo).
chl
@chl: O pacote r "boruta" não é validado executando a floresta aleatória várias vezes? Você está basicamente dizendo que precisamos de "meta-validação cruzada", onde você faz a seleção de variáveis ​​e o modelo é ajustado em subconjuntos aleatórios dos dados?
Zach
3
@Zach Meu argumento era que o ensacamento, ou em particular os RFs, impedia o excesso de ajuste (até certo ponto), desde que você permanecesse na mesma cadeia de ferramentas. Se você usar os resultados das RFs e depois ver como outro modelo funcionaria com os mesmos dados, você interromperá o ciclo CV. Mas por que não usar diretamente RFs para classificação? Outra solução seria usar RFs em uma amostra de treinamento e, em seguida, aplicar o GLM em uma amostra retida (que também poderia ser validada cruzadamente).
chl
0

stats::stepfunção ou o mais geral MASS::stepAICde apoio função lm, glm(isto é, a regressão logística) e aovfamiliares modelos.

Farid Cheraghi
fonte