Como saber quantitativamente se os dados 1D estão agrupados em torno de 1 ou 3 valores?

9

Eu tenho alguns dados sobre o tempo entre os batimentos cardíacos de um humano. Uma indicação de batidas ectópicas (extras) é que esses intervalos estão agrupados em torno de três valores em vez de um. Como posso obter uma medida quantitativa disso?

Estou procurando comparar vários conjuntos de dados, e esses dois histogramas de 100 bin são representativos de todos eles.

insira a descrição da imagem aqui

Eu poderia comparar as variações, mas quero que meu algoritmo seja capaz de detectar se há um ou três clusters em cada caso, sem comparar com os outros casos.

Isso é para processamento off-line, portanto, há muito poder de computação disponível, se necessário.

Nikolaus
fonte
11
Relacionado : stats.stackexchange.com/questions/5960/…
cardinal

Respostas:

3

Aconselho fortemente contra o uso de k-means aqui. Os resultados para diferentes valores de k não são muito bem comparáveis. O método é apenas uma heurística grosseira. Se você realmente deseja usar o agrupamento, use o agrupamento EM, pois seus dados parecem conter distribuições normais. E valide seus resultados!

Em vez disso, a abordagem óbvia é tentar ajustar uma única função gaussiana e (por exemplo, usando o método Levenberg-Marquard) ajustar três funções gaussianas, talvez restritas à mesma altura (para evitar a degeneração).

Em seguida, teste qual das duas distribuições se encaixa melhor.

Possui QUIT - Anony-Mousse
fonte
Obrigado, eu não conhecia Levenberg-Marquardt! Esses grupos não são gaussianos; você ainda acha que as funções gaussianas seriam o melhor PDF para ajustá-las?
Nikolaus
+1 a isso e a Greg Snow. Eu concordo totalmente com este conselho. @ Nikolaus Eu acho que isso parece "suficientemente gaussiano" para se encaixar em uma mistura de distribuições gaussianas. Você não deseja um ajuste perfeito, apenas uma maneira de verificar quantos clusters existem. Nesta óptica, restringir todos os componentes a compartilhar o mesmo desvio padrão pode ser uma boa ideia (pelos motivos explicados por Anony-Mousse).
Elvis
Eles claramente parecem gaussianos o suficiente para mim. K-means modela dados com células Voronoi. Não me parece sensato supor que o melhor ponto de divisão esteja exatamente no meio dos dois meios vizinhos.
Saiu - Anony-Mousse
6

Ajuste uma distribuição de mistura aos dados, algo como uma mistura de 3 distribuições normais e compare a probabilidade desse ajuste com um ajuste de uma única distribuição normal (usando o teste de razão de verossimilhança, ou AIC / BIC). O flexmixpacote Rpode ser útil.

Greg Snow
fonte
4

Se você deseja usar o cluster K-means, precisará de uma maneira de comparar os casos e . Uma abordagem seria usar a estatística de gap de Tibshirani et al. e escolha o que fornece o melhor valor. Há uma implementação R disponível no SLmisc , embora essa função em particular tente , portanto, você deve tomar cuidado para garantir que apenas ou possam ser retornados como o valor ideal.K = 3 K K = 1 , 2 , 3 K = 1 K = 3K=1K=3KK=1,2,3K=1K=3

bnaul
fonte
2

Use um algoritmo de agrupamento K-means para identificar os vários meios

Procure a função KNN em R-seek para encontrar a função apropriada

Ram Ahluwalia
fonte
11
ahh, eu estava prestes a postar isso! Você também pode consultar este link para obter os códigos e whatnots
King
Eu tentei com a kmeansfunção do Matlab . Os meios resultantes variam muito de tentativa para tentativa. (Heurísticas ruins nesta implementação?) Para o conjunto de 1 cluster, recebo médias em torno de (270.293.693) às vezes, em torno de (260.285.308) às vezes. Para o conjunto de 3 clusters, algumas respostas são (196.324.468) e (290.459.478).
Nikolaus
Existe um lugar onde eu possa colar os dados?
Nikolaus
Ah, isso significa 693: existem dois valores discrepantes óbvios, um 532 e um 855, de um total de 755 valores. Todo o restante dos valores pode ser visto no histograma.
Nikolaus
Você deve olhar além dos meios que obtém do k-means e ver como eles realmente descrevem seus dados!
Quit - Anony-Mousse