Répartir les distributions

10

J'ai plusieurs distributions (10 distributions dans la figure ci-dessous). distributions

En fait ce sont des histogrammes: il y a 70 valeurs sur l'axe des x qui sont les tailles de certaines particules dans une solution et pour chaque valeur de x la valeur correspondante de y est la proportion de particules dont la taille est autour de la valeur de x.

Je voudrais regrouper ces distributions. Actuellement j'utilise un clustering hiérarchique avec la distance euclidienne par exemple. Je ne suis pas satisfait du choix de la distance. J'ai essayé la distance théorique de l'information telle que Kullback-Leibler mais il y a beaucoup de zéros dans les données et cela cause des difficultés. Avez-vous une proposition de distance appropriée et / ou une autre méthode de clustering?

Stéphane Laurent
la source

Réponses:

16

Je vous comprends de telle sorte que toutes les distributions peuvent potentiellement prendre les mêmes 70 valeurs discrètes. Ensuite, il vous sera facile de comparer les courbes cumulatives des distributions (la comparaison des courbes cumulatives est le moyen général de comparer les distributions). Ce sera une comparaison omnibus pour les différences de forme, d'emplacement et de propagation.

Donc, préparez les données sous la forme comme (A, B, ... etc sont les distributions)

Value CumProp_A CumProp_B ...
1       .01       .05
2       .12       .14
...     ...       ...
70      1.00      1.00

et calculer une matrice de distance entre les distributions. Soumettre au clustering hiérarchique (je recommanderais la méthode de liaison complète). Quelle distance? Eh bien, si vous pensez que deux courbes cumulatives sont très différentes si elles sont éloignées l'une de l'autre juste à une valeur ( b ), utilisez la distance de Chebyshev. Si vous pensez que deux courbes cumulatives ne sont très différentes que si l'une est stable au-dessus de l'autre le long d'une large plage de valeurs ( c ), utilisez la distance autocorrélative. Si des différences locales entre les courbes sont importantes ( a ), utilisez la distance Manhattan.

entrez la description de l'image ici

PS La distance autocorrélative n'est qu'un coefficient d'autocorrélation non normalisé des différences entre les courbes cumulatives X et Y:

i=2N(XY)i(XY)i1

ttnphns
la source
Excellent - many thanks ! I will do this tomorrow
Stéphane Laurent
The autocorrelative distance is possibly negative. Is it really the good definition ?
Stéphane Laurent
I forgot to ask another question: why would you recommend the complete linkage ?
Stéphane Laurent
You can set to zero negative product terms, if any. I don't insist on complete linkage, rather, I'd warn against "geometric"methods like Ward or centroid because the distances aren't euclidean. I also thought a "dilatative" method like complete linkage will be to your liking
ttnphns
4

If your data are histograms, you might want to look into appropriat distance functions for that such as the "histogram intersection distance".

There is a tool called ELKI that has a wide variety of clustering algorithms (much more modern ones than k-means and hierarchical clustering) and it even has a version of histogram intersection distance included, that you can use in most algorithms. You might want to try out a few of the algorithms available in it. From the plot you gave above, it is unclear to me what you want to do. Group the individual histograms, right? Judging from the 10 you showed above, there might be no clusters.

Has QUIT--Anony-Mousse
la source
Thanks. But I'm looking for a tool available in R or SAS. Then ten distributions above are just one example, I have a lot of series of distributions to cluster.
Stéphane Laurent
2

You may want to use some feature extraction technique to derive descriptors for a k-means or other type of clustering.

A basic approach would be to fit a certain distribution to your histograms and use its parameters as descriptors. For instance, you seem to have bimodal distributions, that you can describe with 2 means and 2 standard deviations.

Another possibility is to cluster over the first two or three principal component of the counts of the histograms.

Alternatively wavelets approaches can be used.

This page explains how to do that when dealing with extracellular spikes. The data is different, but the idea should be applicable to your case. You will also find many references at the bottom.

http://www.scholarpedia.org/article/Spike_sorting

In R you can calculate the principal components of your peaks using either the princomp or prcomp function. Here you'll find a tutorial on PCA in R.

For wavelets you may look at the wavelets package.

k-means clustering can be achieved using the kmeans function.

nico
la source
Thanks, I'll take a look at your proposal whenever possible.
Stéphane Laurent