Jak wyznaczać odległość pomiędzy obserwacjami?
Analiza skupisk jest oparta o odległości pomiędzy obserwacjami. Poprawne określenie odległości jest być albo nie być dla poprawności wyników.
W kolejnych podrozdziałach opiszemy różne algorytmy identyfikacji skupisk, ale nie ma znaczenia której metody używamy jeżeli źle określimy odległości.
Niech i oznaczają dwie obserwacje opisane przez wektory wartości, i .
Typowe definicje funkcji odległości pomiędzy nimi to:
Typowe wybory dla zmiennych ilościowych
Odległość Euklidesowa
Standardowa odległość w
Odległość maksimum
Maksymalna odległość po współrzędnych.
Odległość Manhattan (taksówkowa)
Suma odległości po współrzędnych
Odległość Canberra
Ważona wersja odległości Manhattan, stosowana dla danych o zliczeniach (np. o rozkładzie zbliżonym do Poissona), uporządkowanych rankingach itp.
Typowe wybory dla zmiennych jakościowych
Odległość Hamminga
Liczba różnych współrzędnych. Często wykorzystywana dla ciągów cyfr lub liter, ale też dla binarnych wektorów.
Odległość Jaccarda
Dla wektorów binarnych, najprostsza interpretacja to: wielkość przecięcia podzielona na wielkość części sumy. Często używana przez ekologów, np. gdy bada się jak często dwa gatunki współwystępują. Sensownie jest wtedy porównywać jak często te gatunki występują razem w stosunku do liczby miejsc gdzie występuje przynajmniej jeden z nich.
Nietypowe wybory
Jeżeli analizujemy wektor zmiennych o zbliżonych charakterystykach to możemy wybrać którąś z powyższych metryk. Ale:
Jeżeli elementy wektora są w znacząco różnych zakresach zmienności to często rozsądnym pomysłem jest unormowanie każdej ze współrzędnych osobno (np. długość w metrach i milimetrach). Unormować można tak by średnia była równa 0 i sd 1 lub by zakres zmienności wynosił [0,1] lub w inny sposób (np. przez rangi).
Jeżeli elementy i składają się z różnych zmiennych, np. jakościowych (kraj pochodzenia) i ilościowych (wiek) to możemy na poszczególnych współrzędnych wyznaczać cząstkowe macierze odległości a następnie je składać.
Często nie jest oczywiste jak liczyć odległość. Przypuśćmy że porównujemy głosowania posłów (za, przeciw, wstrzymał się, nie było go) - odległość pomiędzy głosowaniami można różnie określać. Lub przypuśćmy że porównujemy korpusy tekstów. Co będzie dobrą miarą podobieństwa napisów? A gdy porównujemy obrazy? Często nie ma sensu porównywanie bezpośrednio obrazów, ale najpierw wyznacza się cechy które już można porównywać w bardziej klasyczny sposób.
A jak to zrobić w R?
Najprostszy sposób by policzyć odległość w R jest przez użycie funkcji dist()
. Są w niej zaimplementowane powyżej opisane odległości.
kwiatkow5 <- iris[1:5,1:4]
dist(kwiatkow5)
## 1 2 3 4
## 2 0.5385165
## 3 0.5099020 0.3000000
## 4 0.6480741 0.3316625 0.2449490
## 5 0.1414214 0.6082763 0.5099020 0.6480741
dist(kwiatkow5, method = "manhattan")
## 1 2 3 4
## 2 0.7
## 3 0.8 0.5
## 4 1.0 0.5 0.4
## 5 0.2 0.7 0.8 1.0
as.matrix(dist(kwiatkow5, method = "max"))
## 1 2 3 4 5
## 1 0.0 0.5 0.4 0.5 0.1
## 2 0.5 0.0 0.2 0.3 0.6
## 3 0.4 0.2 0.0 0.2 0.4
## 4 0.5 0.3 0.2 0.0 0.5
## 5 0.1 0.6 0.4 0.5 0.0
Łatwość jej użycia niesie ryzyko stosowania jej bez głębszej refleksji jakie odległości mają sens.
Powtórzmy więc jeszcze raz w analizie skupisk kluczowy jest wybór odległości.
Pokaż ją!
Macierz odległości (o ile nie jest duża) można przedstawiać graficznie z użyciem tzw. mapy ciepła. Więcej o tym jak jest konstruowana w kolejnych rozdziałach.
d <- as.matrix(dist(kwiatkow5, method = "max"))
heatmap(d, symm = TRUE)