Як виконати багатовимірне масштабування в r (з прикладом)


У статистиці багатовимірне масштабування — це спосіб візуалізації подібності спостережень у наборі даних у абстрактному декартовому просторі (зазвичай 2D).

Найпростіший спосіб виконати багатовимірне масштабування в R — це використати вбудовану функцію cmdscale() , яка використовує такий базовий синтаксис:

cmdscale(d, eig = FALSE, k = 2, …)

золото:

  • d : матриця відстані, яка зазвичай обчислюється функцією dist() .
  • eig : повертати чи ні власні значення.
  • k : кількість вимірів для перегляду даних. Типовим є 2 .

У наступному прикладі показано, як використовувати цю функцію на практиці.

Приклад: багатовимірне масштабування в R

Припустимо, у R є наступний кадр даних, який містить інформацію про різних баскетболістів:

 #create data frame
df <- data. frame (points=c(4, 4, 6, 7, 8, 14, 16, 19, 25, 25, 28),
                 assists=c(3, 2, 2, 5, 4, 8, 7, 6, 8, 10, 11),
                 blocks=c(7, 3, 6, 7, 5, 8, 8, 4, 2, 2, 1),
                 rebounds=c(4, 5, 5, 6, 5, 8, 10, 4, 3, 2, 2))

#add row names
row. names (df) <- LETTERS[1:11]

#view data frame
df

  points assists blocks rebounds
A 4 3 7 4
B 4 2 3 5
C 6 2 6 5
D 7 5 7 6
E 8 4 5 5
F 14 8 8 8
G 16 7 8 10
H 19 6 4 4
I 25 8 2 3
D 25 10 2 2
K 28 11 1 2

Ми можемо використовувати наступний код для виконання багатовимірного масштабування за допомогою функції cmdscale() і візуалізації результатів у 2D-просторі:

 #calculate distance matrix
d <- dist(df)

#perform multidimensional scaling
fit <- cmdscale(d, eig= TRUE , k= 2 )

#extract (x, y) coordinates of multidimensional scaling
x <- fit$points[,1]
y <- fit$points[,2]

#create scatterplot
plot(x, y, xlab=" Coordinate 1 ", ylab=" Coordinate 2 ",
     main=" Multidimensional Scaling Results ", type=" n ")

#add row names of data frame as labels
text(x, y, labels=row. names (df))

багатовимірне масштабування в R

Гравці в оригінальному кадрі даних, які мають схожі значення в оригінальних чотирьох стовпцях (очки, передачі, блоки та підбирання), розташовані близько один до одного на сюжеті.

Наприклад, гравці А і С закриті один до одного. Ось їх значення з вихідного кадру даних:

 #view data frame values for players A and C
df[rownames(df) %in% c(' A ', ' C '), ]

  points assists blocks rebounds
A 4 3 7 4
C 6 2 6 5

Їх значення для очок, передач, блоків і підбирань дуже схожі, що пояснює, чому вони так близькі один до одного на двовимірному графіку.

На противагу цьому розглянемо гравців B і K , які знаходяться далеко один від одного в сюжеті.

Якщо ми звернемося до їхніх значень у вихідних даних, то побачимо, що вони досить різні:

 #view data frame values for players B and K
df[rownames(df) %in% c(' B ', ' K '), ]

  points assists blocks rebounds
B 4 2 3 5
K 28 11 1 2

Таким чином, двовимірний графік є хорошим способом візуалізації того, наскільки схожий кожен гравець за всіма змінними у кадрі даних.

Гравці зі схожою статистикою згруповані близько один до одного, тоді як гравці з дуже різною статистикою розташовані далі один від одного в сюжеті.

Зауважте, що ви також можете отримати точні координати (x, y) кожного гравця на графіку, ввівши fit , що є назвою змінної, у якій ми зберігаємо результати функції cmdscale() :

 #view (x, y) coordinates of points in the plot
fit

         [,1] [,2]
A -10.6617577 -1.2511291
B -10.3858237 -3.3450473
C -9.0330408 -1.1968116
D -7.4905743 1.0578445
E -6.4021114 -1.0743669
F -0.4618426 4.7392534
G 0.8850934 6.1460850
H 4.7352436 -0.6004609
I 11.3793381 -1.3563398
J 12.0844168 -1.5494108
K 15.3510585 -1.5696166

Додаткові ресурси

У наступних посібниках пояснюється, як виконувати інші типові завдання в R:

Як нормалізувати дані в R
Як до центру обробки даних у R
Як видалити викиди в R

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *