Ajustar uma regressão logística usando lme4 termina com
Error in mer_finalize(ans) : Downdated X'X is not positive definite.
Uma causa provável desse erro é aparentemente uma deficiência de classificação. O que é deficiência de classificação e como devo resolvê-la?
caret
possui uma função chamadafindLinearCombos
que informará quais são as variáveis problemáticas.Respostas:
A deficiência de classificação nesse contexto diz que não há informações suficientes contidas em seus dados para estimar o modelo desejado. Decorre de muitas origens. Vou falar aqui sobre modelagem em um contexto bastante geral, em vez de regressão explicitamente logística, mas tudo ainda se aplica ao contexto específico.
A deficiência pode resultar de poucos dados. Em geral, você não pode estimar exclusivamente n parâmetros com menos de n pontos de dados. Isso não significa que tudo o que você precisa são n pontos, como se houvesse algum ruído no processo, você obteria resultados bastante ruins. Você precisa de mais dados para ajudar o algoritmo a escolher uma solução que represente todos os dados, em um sentido mínimo de erro. É por isso que usamos ferramentas de mínimos quadrados. De quantos dados você precisa? Sempre me fizeram essa pergunta em uma vida passada, e a resposta foi mais do que você tem, ou o máximo que pode obter. :)
Às vezes, você pode ter mais dados do que precisa, mas alguns pontos (demais) são replicados. A replicação é BOM no sentido de ajudar a reduzir o ruído, mas não ajuda a aumentar a classificação numérica. Portanto, suponha que você tenha apenas dois pontos de dados. Você não pode estimar um modelo quadrático único através dos pontos. Um milhão de repetições de cada ponto ainda não permitirá que você ajuste mais do que uma linha reta, através do que ainda são efetivamente apenas um par de pontos. Essencialmente, a replicação não adiciona conteúdo informativo. Tudo o que faz é diminuir o ruído em locais onde você já possui informações.
Às vezes você tem informações nos lugares errados. Por exemplo, você não pode ajustar um modelo quadrático bidimensional se tudo o que você tem são pontos que estão todos em uma linha reta em duas dimensões. Ou seja, suponha que você tenha pontos espalhados apenas ao longo da linha x = y no plano e deseje ajustar um modelo para a superfície z (x, y). Mesmo com zilhões de pontos (nem mesmo réplicas), você terá informações suficientes para estimar de forma inteligente mais do que um modelo constante. Surpreendentemente, esse é um problema comum que eu já vi em dados amostrados. O usuário se pergunta por que não pode construir um bom modelo. O problema está embutido nos próprios dados que eles amostraram.
Às vezes, é simplesmente a escolha do modelo. Isso pode ser visto como "dados insuficientes", mas do outro lado. Você deseja estimar um modelo complicado, mas forneceu dados insuficientes para isso.
Em todos os casos acima, a resposta é obter mais dados, amostrados de forma inteligente em locais que fornecerão informações sobre o processo que você não possui atualmente. O projeto de experimentos é um bom lugar para começar.
No entanto, mesmo bons dados às vezes são inadequados, pelo menos numericamente. (Por que coisas ruins acontecem com bons dados?) O problema aqui pode estar relacionado ao modelo. Pode estar em nada mais do que uma má escolha de unidades. Pode resultar da programação do computador feita para resolver o problema. (Ugh! Por onde começar?)
Primeiro, vamos falar sobre unidades e dimensionamento. Suponha que eu tente resolver um problema em que uma variável seja MUITAS ordens de magnitude maiores que outra. Por exemplo, suponha que eu tenha um problema que envolva minha altura e meu tamanho de sapato. Vou medir minha altura em nanômetros. Portanto, minha altura seria de aproximadamente 1,78 bilhão (1,78e9) de nanômetros. Obviamente, escolherei medir o tamanho do meu sapato em quilo-parsecs, então 9.14e-21 quilo-parsecs. Quando você faz a modelagem de regressão, a regressão linear é toda sobre álgebra linear, que envolve combinações lineares de variáveis. O problema aqui é que esses números são diferentes por imensas ordens de magnitude (e nem mesmo pelas mesmas unidades). A matemática falhará quando um programa de computador tentar adicionar e subtrair números que variam em tantas ordens de magnitude (para uma precisão dupla). número,
O truque geralmente é usar unidades comuns, mas em alguns problemas até isso é um problema quando as variáveis variam em muitas ordens de magnitude. Mais importante é escalar seus números para serem similares em magnitude.
Em seguida, você poderá encontrar problemas com grandes números e pequenas variações nesses números. Portanto, suponha que você tente construir um modelo polinomial de ordem moderadamente alta com dados em que todas as suas entradas estejam no intervalo [1,2]. Quadrados, cubos etc., números da ordem de 1 ou 2 não causarão problemas ao trabalhar com aritmética de precisão dupla. Como alternativa, adicione 1e12 a cada número. Em teoria, a matemática permitirá isso. Tudo o que faz é mudar qualquer modelo polinomial que construímos no eixo x. Teria exatamente a mesma forma, mas seria traduzida por 1e12 para a direita. Na prática, a álgebra linear falhará miseravelmente devido a problemas de deficiência de classificação. Você não fez nada além de traduzir os dados, mas de repente começa a ver matrizes singulares aparecendo.
Normalmente, o comentário feito será uma sugestão para "centralizar e dimensionar seus dados". Efetivamente, isso diz mudar e escalar os dados para que tenham uma média próxima de zero e um desvio padrão que seja aproximadamente 1. Isso melhorará bastante o condicionamento da maioria dos modelos polinomiais, reduzindo os problemas de deficiência de classificação.
Existem outras razões para a deficiência de classificação. Em alguns casos, é incorporado diretamente no modelo. Por exemplo, suponha que eu forneça a derivada de uma função, posso deduzir exclusivamente a própria função? É claro que não, pois a integração envolve uma constante de integração, um parâmetro desconhecido que geralmente é inferido pelo conhecimento do valor da função em algum momento. De fato, isso às vezes também surge em problemas de estimativa, onde a singularidade de um sistema é derivada da natureza fundamental do sistema em estudo.
Eu certamente deixei de fora algumas das muitas razões para a deficiência de classificação em um sistema linear, e eu tenho discutido por muito tempo agora. Espero que eu tenha conseguido explicar aqueles que cobri em termos simples e uma maneira de aliviar o problema.
fonte
Para a definição da classificação de uma matriz, você pode consultar qualquer bom livro sobre álgebra linear ou dar uma olhada na página da Wikipedia .
Uma matriz é considerada a classificação completa se , e suas colunas não são uma combinação linear entre si. Nesse caso, a matriz é definida positivamente, o que implica que ela possui um inverso .n×p X n≥p p×p XTX (XTX)−1
Se não for de classificação completa, uma das colunas é totalmente explicada pelas outras, no sentido de que é uma combinação linear das outras. Um exemplo trivial é quando uma coluna é duplicada. Isso também pode acontecer se você tiver uma variável 0-1 e uma coluna consistir em apenas 0 ou apenas 1. Nesse caso, a classificação da matriz é menor que e não tem inverso.X X n XTX
Como a solução de muitos problemas de regressão (incluindo a regressão logística) envolve o intermediário de computação , é impossível estimar os parâmetros do modelo. Por curiosidade, você pode verificar aqui como esse termo está envolvido na fórmula da regressão linear múltipla.(XTX)−1
Era isso por absoluta deficiência de classificação. Mas, às vezes, o problema aparece quando a matriz "quase" não está na classificação completa, conforme detalhado extensivamente por @woodchips. Esse problema geralmente é chamado de multicolinearidade . Esse problema é bastante comum, você pode descobrir mais sobre como lidar com ele em posts relacionados aqui e ali .X
fonte
A resposta do user974 é fantástica do ponto de vista da modelagem e a resposta do gui11aume é fantástica do ponto de vista matemático. Quero refinar a resposta anterior estritamente de uma perspectiva de modelagem mista: especificamente uma perspectiva de modelagem mista generalizada (GLMM). Como você pode ver, você referenciou a função R,
mer_finalize
que está nolme4
pacote fantástico . Você também diz que está ajustando um modelo de regressão logística.Existem muitos problemas que surgem com esses tipos de algoritmos numéricos. Vale a pena considerar a questão da estrutura matricial da matriz modelo de efeitos fixos, como aludido pelo usuário974. Mas isso é muito fácil de avaliar, basta calcular os argumentos
model.matrix
yourformula=
edata=
em um modelo e tomar seu determinante usando adet
função Os efeitos aleatórios, no entanto, complicam bastante a interpretação, a rotina de estimativa numérica e a inferência sobre os efeitos fixos (o que você normalmente considera coeficientes de regressão em um modelo de regressão "regular").Suponha que no caso mais simples você tenha apenas um modelo de interceptação aleatória. Então, você está basicamente considerando que existem milhares de fontes de heterogeneidade não medidas que são mantidas constantes em medidas repetidas dentro de clusters. Você estima uma interceptação "grandiosa", mas considera a heterogeneidade assumindo que as interceptações específicas do cluster têm alguma distribuição normal média0. As interceptações são estimadas iterativamente e usadas para atualizar os efeitos do modelo até que a convergência seja alcançada (a probabilidade do log - ou uma aproximação dela - é maximizada). O modelo misto é muito fácil de visualizar, mas matematicamente a probabilidade é muito complexa e propensa a problemas com singularidades, mínimos locais e pontos de contorno (odds ratio = 0 ou infinito). Modelos mistos não têm probabilidade quadrática como GLMs canônicos.
Infelizmente, Venerables e Ripley não investiram muito em diagnósticos para falhas de convergência como a sua. É praticamente impossível especular a miríade de possíveis erros que levam a essa mensagem. Considere, então, os tipos de diagnóstico que eu uso abaixo:
Como alternativa, você pode considerar algumas abordagens de modelagem diferentes:
fonte