Как выполнить многомерное масштабирование для набора данных из 12 стран, о котором сообщает Wish (1971) - PullRequest
0 голосов
/ 07 апреля 2019

Я в настоящее время самостоятельно изучаю многомерное шкалирование.Среди прочего я изучаю Borg & Groenen (2005): Современное многомерное масштабирование: теория и приложения.

На странице 10 они представляют реальный набор данных, о котором сообщает Wish (1971).Wish (1971) попросил 18 студентов оценить глобальное сходство разных пар наций, таких как Франция и Китай, по 9-балльной шкале от 1 = очень разные до 9 = очень похожие.Поскольку набор данных общедоступен, я хотел повторить результат в R для практических целей.В качестве первого шага я хотел воспроизвести следующую конфигурацию, также представленную в Borg & Groenen (2005, с. 10).

enter image description here

Я действовал следующим образом:

library(smacof)                       ### this package contains the data set
data(wish)                            ### that is the data set

Поскольку наборы данных содержат рейтинги сходства, я применил неметрическое многомерное масштабирование, используякоманда isoMDS пакета MASS.Хотя авторы учебника говорят о «двумерной конфигурации MDS», я также попробовал многомерные решения.Поэтому я закодировал цикл, который выполняет многомерное масштабирование для конфигураций, содержащих измерения от 2 до 9.

X <- c()
for (i in 2:9) {
  MDS <- isoMDS(wish, k = i)
  X <- c(X, MDS$stress)
  plot(MDS$points[,c(1,2)])
  text(MDS$points[, 1], MDS$points[, 2], colnames(as.matrix(wish)), cex=.6, 
  pos = 1)
}
plot(X, type = "b")                    ### this  allowed me to plot the stress levels associated with each configuration

Ни один из полученных графиков не был похож на тот, что представлен в Borg & Groenen (2005, стр. 10).Например, карта для двух измерений выглядит следующим образом:

enter image description here

Я проверил, что набор данных идентичен тому, о котором сообщили Borg & Groenen (2005, стр. 10).Я также попробовал метрическое масштабирование следующим образом:

for (i in 2:9) {
  plot(smacofSym(wish, ndim=i))
}

Опять же, я не смог повторить результаты, сообщенные Borg & Groenen (2005, с. 10).Однако я не уверен, что допустил ошибку при попытке повторить результаты.

1 Ответ

1 голос
/ 07 апреля 2019

Используя базовую R cmdscale, я получаю аналогичный результат, полученный Боргом и Гроененом.

Если вы посмотрите на структуру wish, вы увидите, что это просто вектор из 66 чисел.Я интерпретирую это как нижнюю триангулярную матрицу подобия.Я преобразую это в полную матрицу различий, чтобы я мог использовать cmdscale и строить графики.Позиции примерно совпадают с позициями Borg & Groenen.

library(smacof)
data(wish)

## Construct distance matrix
SM = matrix(0, nrow=12, ncol=12)
SM[lower.tri(SM)] = wish
SM = SM + t(SM)
diag(SM) = 9
DM = 9-SM

## MDS & plotting
MDS = cmdscale(DM)
plot(MDS, pch=20, xlim=c(-4,4), ylim=c(-4,4))
text(MDS, labels = attr(wish, "Labels"), adj=c(0.5,-0.6), cex=0.8)
abline(0.5,0.3, lty=2)
abline(-1,-3.8, lty=2)

Plot of Multi-Dimensional Scaling

...