Estou tentando prever um resultado binário usando 50 variáveis explicativas contínuas (o intervalo da maioria das variáveis é a ). Meu conjunto de dados tem quase 24.000 linhas. Quando corro no R, recebo:glm
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
Li as outras respostas que sugerem que a separação perfeita pode estar ocorrendo, mas estou confiante de que não é o caso nos meus dados (embora possa existir uma separação quase completa; como posso testar para ver se é esse o caso?) . Se eu remover algumas variáveis, o erro "não converge" pode desaparecer. Mas isso nem sempre é o que acontece.
Tentei usar as mesmas variáveis em uma bayesglm
função e obtive os mesmos erros.
Que medidas você daria para descobrir exatamente o que está acontecendo aqui? Como você descobre quais variáveis estão causando os problemas?
fonte
bayesglm
papel , eles argumentam que a separação é "um problema comum, mesmo quando o tamanho da amostra é grande eo número de preditores é pequena"bayesglm
tenta evitar a separação adicionando um prior, mas com 24.000 linhas, o prior provavelmente está sendo inundado pela probabilidade. Tente encolherprior.scale
, possivelmente em grande quantidade. Considere também aumentar os graus de liberdade do prior, o que ajudará a descartar grandes valores associados à separação.Respostas:
Com um espaço de design tão grande ( !), É possível obter uma separação perfeita sem ter a separação em nenhuma variável tomada individualmente. Eu até diria o comentário de David J. Harris dizendo que isso é provável.R50
Você pode testar facilmente se suas classes estão perfeitamente separadas no seu espaço de design. Isso se resume a resolver um problema de programação linear. Uma implementação R deste 'teste' (não um teste no sentido estatístico do termo) é implementada no pacote safeBinaryRegression .
Se a separação é realmente o problema, e se você está interessado apenas no uso simples de glm (por exemplo, glm não é chamado por uma função de nível superior, mas por você), existe uma implementação R de um algoritmo que modifica levemente o clássico para torná-lo "robusto" contra a separação. É implementado no pacote hlr
fonte