Como identificar uma distribuição bimodal?

48

Entendo que, depois de traçarmos os valores como um gráfico, podemos identificar uma distribuição bimodal observando os picos duplos, mas como encontrá-la programaticamente? (Estou procurando um algoritmo.)

venkasub
fonte
5
Pergunta intrigante. Eu não sei nada sobre isso, então não tentarei uma resposta, mas o teste de bimodalidade + no Google fornece algumas pistas promissoras. google.co.uk/search?q=bimodality+test
onestop
um código programático para testar a multimodalidade está disponível em www.estima.com e é chamado MODES.SRC. Você pode convertê-lo facilmente para Matlab, R ou outros softwares. Atenciosamente, Guido.
11
Você não pode identificar o número de modos (não há limite para o número de pequenas manobras que uma distribuição poderia ter), mas é possível obter um limite inferior. por exemplo, veja aqui projecteuclid.org/euclid.aos/1176351045
Glen_b 25/01/14

Respostas:

27

Identificar um modo para uma distribuição contínua requer suavizar ou agrupar os dados.

A distribuição é geralmente muito processual: os resultados geralmente dependem de onde você coloca os pontos de corte da bandeja.

A suavização do kernel (especificamente, na forma de estimativa da densidade do kernel ) é uma boa opção. Embora muitas formas de kernel sejam possíveis, normalmente o resultado não depende muito da forma. Depende da largura de banda do kernel. Portanto, as pessoas usam um kernel adaptável suave ou conduzem uma sequência de kernel smooths para variar larguras de banda fixas, a fim de verificar a estabilidade dos modos identificados. Embora o uso de um adaptador mais adequado ou "ideal" seja atraente, lembre-se de que a maioria (todos?) Deles foi projetada para alcançar um equilíbrio entre precisão e precisão média: eles não foram projetados para otimizar a estimativa da localização dos modos.

No que diz respeito à implementação, os parceiros do kernel mudam localmente e escalam uma função predeterminada para ajustar os dados. Desde que essa função básica seja diferenciável - os gaussianos são uma boa escolha, porque você pode diferenciá-los quantas vezes quiser -, tudo o que você precisa fazer é substituí-lo por sua derivada para obter a derivada do suave. Depois, basta aplicar um procedimento padrão de busca zero para detectar e testar os pontos críticos. ( O método de Brent funciona bem.) É claro que você pode fazer o mesmo truque com a segunda derivada para testar rapidamente se algum ponto crítico é um máximo local - ou seja, um modo.

whuber
fonte
2
@venkasub, você também pode procurar o método de Muller para encontrar raízes. É mais simples que o método de Brent e "quase" tão eficiente quanto o método de Newton, mas sem a necessidade de conhecer as derivadas da função alvo.
cardeal
25

Há um artigo bem conhecido de Silverman que trata dessa questão. Ele emprega estimativa de densidade de kernel. Vejo

BW Silverman, Usando estimativas de densidade de kernel para investigar multimodalidade , J. Royal Stat. Soc. B , vol. 43, n. 1, 1981, pp. 97-99.

Observe que existem alguns erros nas tabelas do documento. Este é apenas um ponto de partida, mas muito bom. Ele fornece um algoritmo bem definido para uso, caso seja o que você mais procura. Você pode procurar no Google Scholar artigos que o citam para abordagens mais "modernas".

cardeal
fonte
4
+1 Este documento explora informações sobre como o número de modos aparentes depende da largura do kernel (para os núcleos gaussianos) para selecionar uma largura apropriada e continua como descrito na minha resposta.
whuber
2

Cheguei atrasado à festa, mas se você está apenas interessado em saber se é multimodal ou não, o que significa que você não está interessado no número de modos, você deve olhar para os mais fracos .

No Rpacote é chamado diptest.

Kots
fonte
2
O nome completo é Dip Test of Unimodality de Hartigan. O artigo original descreve a seguinte descrição: O teste de mergulho mede a multimodalidade em uma amostra pela diferença máxima, em todos os pontos da amostra, entre a função de distribuição empírica e a função de distribuição unimodal que minimiza essa diferença máxima. O algoritmo não é trivial, mas você pode encontrar facilmente traduções C, Python, MATLAB e Fortran modernas com base na implementação original do Fortran em Computação da estatística Dip para testar a unimodalidade .
mortehu 28/08
11
Código MATLAB: nicprice.net/diptest e outro - gist.github.com/schluppeck/e7635dcf0e80ca54efb0 .
Royi 17/10
0

A definição no wiki é um pouco confusa para mim. A probabilidade de um conjunto de dados contínuo ter apenas um modo é zero. Uma maneira simples de programar um distrubiton bimodal é com duas distribuições normais separadas, centradas de maneira diferente. Isso cria dois picos ou o que o wiki chama de modos. Você pode realmente usar quase duas distribuições, mas uma das oportunidades estatísticas mais difíceis é descobrir como o conjunto de dados foi formado depois de combinar as duas distribuições aleatórias de dados.

Manjericão
fonte
Como você identificará os centros das duas distribuições normais?
venkasub
@venkasub, o centro da distribuição normal é a sua média. Se você sabe que a bimodalidade vem de duas distribuições normais, você pode ajustar o modelo de mistura para estimar as médias, que serão dois modos.
mpiktas