Rozkłady klastrowe

10

Mam kilka rozkładów (10 rozkładów na poniższym rysunku). dystrybucje

W rzeczywistości są to histogramy: na osi x znajduje się 70 wartości, które są wielkościami niektórych cząstek w roztworze, a dla każdej wartości x odpowiadająca wartość y jest proporcją cząstek, których wielkość jest zbliżona do wartości x.

Chciałbym zgrupować te dystrybucje. Obecnie używam hierarchicznego grupowania na przykład z odległością euklidesową. Wybór odległości nie satysfakcjonuje mnie. Próbowałem teoretycznej odległości, takiej jak Kullback-Leibler, ale w danych jest wiele zer, co powoduje trudności. Czy masz propozycję odpowiedniej odległości i / lub innej metody grupowania?

Stéphane Laurent
źródło

Odpowiedzi:

16

Rozumiem cię tak, że wszystkie rozkłady mogą potencjalnie przyjmować te same 70 wartości dyskretnych. Wtedy łatwo będzie ci porównać skumulowane krzywe rozkładów (porównywanie krzywych skumulowanych to ogólny sposób porównywania rozkładów). Będzie to porównanie dookólne pod względem różnic w kształcie, lokalizacji i zasięgu.

Przygotuj więc dane w postaci takiej jak (A, B, ... itd. To rozkłady)

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

i obliczyć macierz odległości między rozkładami. Prześlij do hierarchicznego grupowania (polecam kompletną metodę łączenia). Jaka odległość Cóż, jeśli uważasz, że dwie skumulowane krzywe są bardzo różne, jeśli są daleko od siebie tylko przy jednej wartości ( b ), użyj odległości Czebyszewa. Jeśli uważasz, że dwie krzywe skumulowane są bardzo różne tylko wtedy, gdy jedna jest stabilnie nad drugą wzdłuż szerokiego zakresu wartości ( c ), użyj odległości autokorelacyjnej. Jeśli jakiekolwiek lokalne różnice między krzywymi są ważne ( a ), użyj odległości na Manhattanie.

wprowadź opis zdjęcia tutaj

PS Autokorelacyjna odległość to po prostu nienormalizowany współczynnik autokorelacji różnic między krzywymi skumulowanymi X i Y:

ja=2)N.(X-Y)ja(X-Y)ja-1

ttnphns
źródło
Doskonałe - wielkie dzięki! Zrobię to jutro
Stéphane Laurent,
Odległość autokorelacyjna jest prawdopodobnie ujemna. Czy to naprawdę dobra definicja?
Stéphane Laurent,
Zapomniałem zadać kolejne pytanie: dlaczego poleciłbyś pełny link?
Stéphane Laurent,
Możesz ustawić zero ujemnych warunków produktu, jeśli takie istnieją. Nie nalegam na całkowite powiązanie, raczej ostrzegałbym przed metodami „geometrycznymi”, takimi jak Ward czy centroid, ponieważ odległości nie są euklidesowe. Myślałem również, że metoda „dylatacyjna”, taka jak pełne powiązanie, przypadnie Ci do gustu
ttnphns
4

Jeśli twoje dane to histogramy, możesz zajrzeć do odpowiednich funkcji odległości, takich jak „odległość przecięcia histogramu”.

Istnieje narzędzie o nazwie ELKI, które ma szeroką gamę algorytmów klastrowania (znacznie nowocześniejszych niż k-średnie i klastrowanie hierarchiczne), a nawet zawiera wersję odległości przecięcia histogramu, której można używać w większości algorytmów. Możesz wypróbować kilka dostępnych w nim algorytmów. Z fabuły, którą podałeś powyżej, nie jest dla mnie jasne, co chcesz zrobić. Zgrupuj poszczególne histogramy, prawda? Sądząc po 10, które pokazałeś powyżej, gromady mogą nie istnieć.

Ma ZAKOŃCZENIE - Anony-Mus
źródło
Dzięki. Ale szukam narzędzia dostępnego w R lub SAS. Zatem dziesięć powyższych dystrybucji to tylko jeden przykład, mam wiele serii dystrybucji do klastra.
Stéphane Laurent,
2

Możesz użyć jakiejś techniki wyodrębniania funkcji, aby uzyskać deskryptory dla k-średnich lub innego rodzaju grupowania.

Podstawowym podejściem byłoby dopasowanie pewnego rozkładu do histogramów i wykorzystanie jego parametrów jako deskryptorów. Na przykład wydaje się, że masz rozkłady bimodalne, które możesz opisać za pomocą 2 średnich i 2 standardowych odchyleń.

Inną możliwością jest grupowanie pierwszych dwóch lub trzech głównych składowych zliczeń histogramów.

Alternatywnie można zastosować podejście falkowe.

Ta strona wyjaśnia, jak to zrobić w przypadku skoków pozakomórkowych. Dane są różne, ale pomysł powinien odnosić się do Twojej sprawy. Znajdziesz również wiele referencji na dole.

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

W R można obliczyć główne składowe pików za pomocą funkcji princomplub prcomp. Tutaj znajdziesz samouczek na temat PCA w R.

W przypadku falek możesz spojrzeć na waveletsopakowanie.

Za pomocą tej kmeansfunkcji można uzyskać grupowanie w k-średnich .

Nico
źródło
Dzięki, w miarę możliwości przyjrzę się twojej propozycji.
Stéphane Laurent,