Klasyczne skalowanie metryczne zakłada, że macierz odległości
Algorytm skalowania jest następujący (jednokrokowy)
- Wyznacz macierz kwadratów odległości
$$D^2 = [d^2_{ij}]$$ , - Wycentruj macierz
$$D^2$$ , wyznacz $$ B = -\frac 12 J D^2 J, $$ gdzie macierz centrująca to$$J = I - 1 1^T/n$$ , - Wyznacz wartości własne
$$\lambda$$ i wektory własne$$V$$ macierzy$$B$$ . - Wyznacz współrzędne obiektów jako
$$
X = V_p diag(\lambda^{1/2}_p),
$$
gdzie
$$V_p$$ to macierz z$$p$$ pierwszymi wektorami własnymi, a wektor$$\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
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()
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()
- Właściwości metody klasycznej K. Mardia Some properties of classical multi-dimensional scaling https://www1.maths.leeds.ac.uk/~sta6kvm/reprints/CommunStatTheo1978.pdf
- Szczegółowe wyprowadzenie skalowania Steffen Unkel Classical Multidimensional Scaling http://www.statistik.lmu.de/institut/ag//leisch/teaching/fcim13/handout.pdf