Классическое многомерное масштабирование, примененное к непространственным расстояниям

В этом примере показано, как выполнить классическое многомерное масштабирование с помощью cmdscale функция в Statistics and Machine Learning Toolbox™. Классическое многомерное масштабирование, также известное как Анализ главных координат, принимает матрицу расстояний между точками и создает строение точек. В идеале эти точки могут быть построены в двух или трёх размерностях, и евклидовы расстояния между ними приблизительно воспроизводят исходную матрицу расстояний. Таким образом, графики поля точек из этих точек обеспечивают визуальное представление исходных расстояний.

Этот пример иллюстрирует приложения многомерного масштабирования к мерам различия, отличным от пространственного расстояния, и показывает, как создать строение точек, чтобы визуализировать эти неоднородности.

Этот пример описывает классическое многомерное масштабирование. The mdscale функция выполняет неклассический MDS, который иногда более гибок, чем классический метод. Неклассический MDS описан в примере Неклассического Многомерного Масштабирования.

Восстановление пространственных местоположений с непространственных расстояний

Предположим, что вы измерили генетическое «расстояние», или различие, между рядом локальных поднаселений одного вида животного. Вы также знаете их географические положения и хотели бы знать, насколько тесно соответствуют их генетические и пространственные расстояния. Если это так, это является доказательством того, что на скрещивание между поднаселениями влияют их географические местоположения.

Ниже приведены пространственные местоположения поднаселений и верхнего треугольника матрицы генетических расстояний в том же векторном формате, произведенном pdist.

X = [39.1     18.7;
     40.7     21.2;
     41.5     21.5;
     39.2     21.8;
     38.7     20.6;
     41.7     20.1;
     40.1     22.1;
     39.2     21.6];

D = [4.69 6.79 3.50 3.11 4.46 5.57 3.00 ...
          2.10 2.27 2.65 2.36 1.99 1.74 ...
               3.78 4.53 2.83 2.44 3.79 ...
                    1.98 4.35 2.07 0.53 ...
                         3.80 3.31 1.47 ...
                              4.35 3.82 ...
                                   2.57];

Хотя этот векторный формат для D является пространственно-эффективным, часто легче увидеть отношения расстояний, если переформатировать расстояния до квадратной матрицы.

squareform(D)
ans = 8×8

         0    4.6900    6.7900    3.5000    3.1100    4.4600    5.5700    3.0000
    4.6900         0    2.1000    2.2700    2.6500    2.3600    1.9900    1.7400
    6.7900    2.1000         0    3.7800    4.5300    2.8300    2.4400    3.7900
    3.5000    2.2700    3.7800         0    1.9800    4.3500    2.0700    0.5300
    3.1100    2.6500    4.5300    1.9800         0    3.8000    3.3100    1.4700
    4.4600    2.3600    2.8300    4.3500    3.8000         0    4.3500    3.8200
    5.5700    1.9900    2.4400    2.0700    3.3100    4.3500         0    2.5700
    3.0000    1.7400    3.7900    0.5300    1.4700    3.8200    2.5700         0

cmdscale распознает любой из двух форматов.

[Y,eigvals] = cmdscale(D);

cmdscaleпервый выход, Y, является матрицей точек, созданной для того, чтобы иметь межточковые расстояния, которые воспроизводят расстояния в D. С восемью видами точки (строки Y) может иметь целых восьми размерностей (столбцы Y). Визуализация генетических расстояний зависит от использования точек только в двух или трёх размерностях. К счастью, cmdscaleвторой выход, eigvals, - набор отсортированных собственных значений, относительные величины которых указывают, сколько размерности можно безопасно использовать. Если большие только первые два или три собственных значений, то только те координаты точек в Y необходимы для точного воспроизведения D. Если больше трех собственных значений большие, то найти хорошее маломерное строение точек не представляется возможным, и визуализировать расстояния будет непросто.

[eigvals eigvals/max(abs(eigvals))]
ans = 8×2

   29.0371    1.0000
   13.5746    0.4675
    2.0987    0.0723
    0.7418    0.0255
    0.3403    0.0117
    0.0000    0.0000
   -0.4542   -0.0156
   -3.1755   -0.1094

Заметьте, что существуют только два больших положительных собственных значений, поэтому строение точек, созданных cmdscale может быть нанесен на график в двух размерностях. Два отрицательных собственных значений указывают, что генетические расстояния не евклидовы, то есть никакое строение точек не может воспроизводиться D точно. К счастью, отрицательные собственные значения малы относительно наибольших положительных таковых и сокращения до первых двух столбцов Y должна быть достаточно точной. Можно проверить это, рассмотрев ошибку в расстояниях между двумерным строением и исходными расстояниями.

maxrelerr = max(abs(D - pdist(Y(:,1:2)))) / max(D)
maxrelerr = 0.1335

Теперь можно сравнить «генетические локации», созданные cmdscale в фактические географические местоположения. Потому что строение, возвращенная cmdscale уникальна только для трансляции, вращения и отражения, генетические местоположения, вероятно, не будут совпадать с географическими местоположениями. У них также будут неправильные шкалы. Но можно использовать procrustes команда, чтобы соответствовать двум наборам точек лучше всего в смысле наименьших квадратов.

[D,Z] = procrustes(X,Y(:,1:2));
plot(X(:,1),X(:,2),'bo',Z(:,1),Z(:,2),'rd');
labels = num2str((1:8)');
text(X(:,1)+.05,X(:,2),labels,'Color','b');
text(Z(:,1)+.05,Z(:,2),labels,'Color','r');
xlabel('Distance East of Reference Point (Km)');
ylabel('Distance North of Reference Point (Km)');
legend({'Spatial Locations','Constructed Genetic Locations'},'Location','SE');

Figure contains an axes. The axes contains 18 objects of type line, text. These objects represent Spatial Locations, Constructed Genetic Locations.

Этот график показывает лучшее соответствие восстановленных точек в тех же координатах, что и фактические пространственные местоположения. По-видимому, генетические расстояния действительно имеют тесную ссылку с пространственными расстояниями между поднаселениями.

Визуализация корреляционной матрицы с помощью многомерного масштабирования

Предположим, что вы вычислили следующую матрицу корреляции для набора из 10 переменных. Очевидно, что все эти переменные положительно коррелируют, и что существуют некоторые очень сильные парные корреляции. Но с этим множеством переменных непросто получить хорошее представление об отношениях между всеми 10.

Rho = ...
  [1       0.3906  0.3746  0.3318  0.4141  0.4279  0.4216  0.4703  0.4362  0.2066;
   0.3906  1       0.3200  0.3629  0.2211  0.9520  0.9811  0.9052  0.4567  0     ;
   0.3746  0.3200  1       0.8993  0.7999  0.3589  0.3460  0.3333  0.8639  0.6527;
   0.3318  0.3629  0.8993  1       0.7125  0.3959  0.3663  0.3394  0.8719  0.5726;
   0.4141  0.2211  0.7999  0.7125  1       0.2374  0.2079  0.2335  0.7050  0.7469;
   0.4279  0.9520  0.3589  0.3959  0.2374  1       0.9657  0.9363  0.4791  0.0254;
   0.4216  0.9811  0.3460  0.3663  0.2079  0.9657  1       0.9123  0.4554  0.0011;
   0.4703  0.9052  0.3333  0.3394  0.2335  0.9363  0.9123  1       0.4418  0.0099;
   0.4362  0.4567  0.8639  0.8719  0.7050  0.4791  0.4554  0.4418  1       0.5272;
   0.2066  0       0.6527  0.5726  0.7469  0.0254  0.0011  0.0099  0.5272  1     ];

Многомерное масштабирование часто рассматривается как способ (re) создать точки, используя только парные расстояния. Но его также можно использовать с мерами различия, которые являются более общими, чем расстояние, чтобы пространственно визуализировать вещи, которые не являются «точками в пространстве» в обычном смысле. Переменные, описанные Rho, являются примером, и вы можете использовать cmdscale построить визуальное представление их взаимозависимостей.

Корреляция на самом деле измеряет подобие, но легко преобразовать его в меру неоднородности. Поскольку все корреляции здесь положительны, можно просто использовать

D = 1 - Rho;

хотя другие варианты могут также иметь смысл. Если Rho содержала отрицательные корреляции, вы должны были бы решить, например, указала ли корреляция -1 на более или менее различие, чем корреляция 0, и выбрать преобразование соответственно.

Важно решить, возможна ли даже визуализация информации в корреляционной матрице, то есть может ли количество размерностей быть уменьшено с десяти до двух или трех. Собственные значения, возвращенные cmdscale дать вам способ решить. В этом случае график scree из этих собственных значений указывает, что две размерности достаточно, чтобы представлять переменные. (Заметьте, что некоторые собственные значения на графике ниже отрицательны, но малы относительно первых двух.)

[Y,eigvals] = cmdscale(D);
plot(1:length(eigvals),eigvals,'bo-');
line([1,length(eigvals)],[0 0],'LineStyle',':','XLimInclude','off',...
     'Color',[.7 .7 .7])
axis([1,length(eigvals),min(eigvals),max(eigvals)*1.1]);
xlabel('Eigenvalue number');
ylabel('Eigenvalue');

Figure contains an axes. The axes contains 2 objects of type line.

В более независимом наборе переменных могут потребоваться больше размерностей. Если необходимо больше трех переменных, визуализация не так уж и полезна.

A 2-D график строения, возвращенный cmdscale указывает, что существует два подмножества переменных, которые наиболее тесно коррелируются между собой, плюс одна переменная, которая более или менее сама по себе. Один из кластеров плотный, другой относительно рыхлый.

labels = {' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9',' 10'};
plot(Y(:,1),Y(:,2),'bx');
axis(max(max(abs(Y))) * [-1.1,1.1,-1.1,1.1]); axis('square');
text(Y(:,1),Y(:,2),labels,'HorizontalAlignment','left');
line([-1,1],[0 0],'XLimInclude','off','Color',[.7 .7 .7])
line([0 0],[-1,1],'YLimInclude','off','Color',[.7 .7 .7])

Figure contains an axes. The axes contains 13 objects of type line, text.

С другой стороны, результаты cmdscale для следующей матрицы корреляции указывает на намного отличную структуру: среди переменных нет действительных групп. Скорее существует своего рода «круговая» зависимость, где каждая переменная имеет пару «ближайших соседей», но менее хорошо коррелирует с остальными переменными.

Rho = ...
  [1       0.7946  0.1760  0.2560  0.7818  0.4496  0.2732  0.3995  0.5305  0.2827;
   0.7946  1       0.1626  0.4227  0.5674  0.6183  0.4004  0.2283  0.3495  0.2777;
   0.1760  0.1626  1       0.2644  0.1864  0.1859  0.4330  0.4656  0.3947  0.8057;
   0.2560  0.4227  0.2644  1       0.1017  0.7426  0.8340  0       0.0499  0.4853;
   0.7818  0.5674  0.1864  0.1017  1       0.2733  0.1484  0.4890  0.6138  0.2025;
   0.4496  0.6183  0.1859  0.7426  0.2733  1       0.6303  0.0648  0.1035  0.3242;
   0.2732  0.4004  0.4330  0.8340  0.1484  0.6303  1       0.1444  0.1357  0.6291;
   0.3995  0.2283  0.4656  0       0.4890  0.0648  0.1444  1       0.8599  0.3948;
   0.5305  0.3495  0.3947  0.0499  0.6138  0.1035  0.1357  0.8599  1       0.3100;
   0.2827  0.2777  0.8057  0.4853  0.2025  0.3242  0.6291  0.3948  0.3100  1     ];

[Y,eigvals] = cmdscale(1-Rho);
[eigvals eigvals./max(abs(eigvals))]
ans = 10×2

    1.1416    1.0000
    0.7742    0.6782
    0.0335    0.0294
    0.0280    0.0245
    0.0239    0.0210
    0.0075    0.0066
    0.0046    0.0040
   -0.0000   -0.0000
   -0.0151   -0.0132
   -0.0472   -0.0413

plot(Y(:,1),Y(:,2),'bx');
axis(max(max(abs(Y))) * [-1.1,1.1,-1.1,1.1]); axis('square');
text(Y(:,1),Y(:,2),labels,'HorizontalAlignment','left');
line([0 0],[-1,1],'XLimInclude','off','Color',[.7 .7 .7])
line([-1,1],[0 0],'YLimInclude','off','Color',[.7 .7 .7])

Figure contains an axes. The axes contains 13 objects of type line, text.

Сравнение анализа основных компонентов и классического многомерного масштабирования

Многомерное масштабирование чаще всего используется для визуализации данных, когда доступны только их расстояния или неоднородности. Однако, когда исходные данные доступны, многомерное масштабирование может также использоваться в качестве метода уменьшения размерности, путем сокращения данных до матрицы расстояний, создания нового строения точек с помощью cmdscaleи сохранение только первых нескольких размерностей этих точек. Это применение многомерного масштабирования очень похоже на анализ основных компонентов, и на самом деле, когда вы вызываете cmdscale используя евклидовы расстояния между точками, результаты идентичны PCA, вплоть до изменения знака.

n = 10; m = 5;
X = randn(n,m);
D = pdist(X,'Euclidean');

[Y,eigvals] = cmdscale(D);
[PC,Score,latent] = pca(X);

Y
Y = 10×5

   -1.4505    1.6602    0.8106    0.5834    0.5952
    2.6140   -1.0513   -1.1962    0.7221   -0.2299
   -2.2399   -1.6699   -0.7881   -0.6659    0.0398
   -0.4956    0.2265    1.2682   -0.5123   -0.5702
    0.1004   -2.3659    1.2672    0.4837   -0.2888
   -2.5996    1.0635   -0.8532    0.1392   -0.1216
   -1.5565    0.4215   -0.0931    0.2863    0.0299
    0.4656   -0.6250   -0.7608   -0.3233    0.2786
    2.3961    2.6933   -0.2020   -0.2572   -0.4374
    2.7660   -0.3529    0.5474   -0.4560    0.7044

Score
Score = 10×5

   -1.4505    1.6602   -0.8106   -0.5834   -0.5952
    2.6140   -1.0513    1.1962   -0.7221    0.2299
   -2.2399   -1.6699    0.7881    0.6659   -0.0398
   -0.4956    0.2265   -1.2682    0.5123    0.5702
    0.1004   -2.3659   -1.2672   -0.4837    0.2888
   -2.5996    1.0635    0.8532   -0.1392    0.1216
   -1.5565    0.4215    0.0931   -0.2863   -0.0299
    0.4656   -0.6250    0.7608    0.3233   -0.2786
    2.3961    2.6933    0.2020    0.2572    0.4374
    2.7660   -0.3529   -0.5474    0.4560   -0.7044

Даже ненулевые собственные значения идентичны шкале фактору.

[eigvals(1:m) (n-1)*latent]
ans = 5×2

   36.9993   36.9993
   21.3766   21.3766
    7.5792    7.5792
    2.2815    2.2815
    1.5981    1.5981

Для просмотра документации необходимо авторизоваться на сайте