Klasyczne skalowanie metryczne

Klasyczne skalowanie metryczne zakłada, że macierz odległości DD powstała na bazie odległości euklidesowej. To skalowanie odpowiada metodzie PCA, z tą różnicą, że puntem wyjścia jest macierz euklidesowych odległości.

Algorytm skalowania jest następujący (jednokrokowy)

  1. Wyznacz macierz kwadratów odległości D2=[dij2]D^2 = [d^2_{ij}],
  2. Wycentruj macierz D2D^2, wyznacz B=12JD2J, B = -\frac 12 J D^2 J, gdzie macierz centrująca to J=I11T/nJ = I - 1 1^T/n,
  3. Wyznacz wartości własne λ\lambda i wektory własne VV macierzy BB.
  4. Wyznacz współrzędne obiektów jako X=Vpdiag(λp1/2), X = V_p diag(\lambda^{1/2}_p), gdzie VpV_p to macierz z pp pierwszymi wektorami własnymi, a wektor λp\lambda_p to p-największych wartości własnych.

Oczywistą zaletą tej metody jest jednokrokowość. Jest to najszybszy algorytm skalowania.

Jednak aby wyniki były miarodajne, założeniem tej metody jest to, że macierz DD oparta jest o odległość euklidesową. Nawet gdy to założenie nie jest spełnione, skalowanie klasyczne jest wykorzystywane by wybrać początkową konfigurację dla innych algorytmów skalowania metrycznego lub nie metrycznego.

Jak przeprowadzić skalowanie klasyczne w R?

Funkcja cmdscale() z pakietu MASS wyznacza klasyczne skalowanie metryczne (nazwa pochodzi od classical metric scalling).

Poniżej zastosujemy ją na tych samych danych co w poprzednim rozdziale.

library(ggplot2)
library(ggrepel)
library(MASS)
library(cluster)

glosowania <- archivist::aread("pbiecek/Przewodnik/arepo/3eab62451d26be6d14fe99dda69675ca")
podobienstwa <- daisy(glosowania[,-(1:2)])

projekcja <- as.data.frame( cmdscale(podobienstwa, k = 2) )
projekcja$klub <- glosowania[,2]
projekcja$imie <- glosowania[,1]

ggplot(projekcja, aes(V1, V2, label=imie)) + 
  geom_point(aes(color=klub)) +theme_bw()

plot of chunk glosowania5

Zaznaczmy na tym wykresie pozycje liderów klubów.

ggplot(projekcja, aes(V1, V2, label=imie)) + 
  geom_point(aes(color=klub)) +
  geom_text_repel(data=projekcja[c(268, 348, 139, 259, 168, 309, 223),]) +theme_bw()

plot of chunk glosowania6

Inne materiały