Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Escalado multidimensional clásico aplicado a distancias no espaciales

En este ejemplo se muestra cómo realizar el escalado multidimensional clásico mediante la función de estadísticas y machine learning Toolbox™.cmdscale El escalado multidimensional clásico, también conocido como análisis de coordenadas principales, toma una matriz de distancias de interpunto y crea una configuración de puntos. Idealmente, esos puntos se pueden construir en dos o tres dimensiones, y las distancias euclidiana entre ellos reproducen aproximadamente la matriz de distancia original. Por lo tanto, un gráfico de dispersión de esos puntos proporciona una representación visual de las distancias originales.

Este ejemplo ilustra las aplicaciones de escalado multidimensional a medidas de dessimilitud que no sean la distancia espacial, y muestra cómo construir una configuración de puntos para visualizar esas disimilaridades.

Este ejemplo describe el escalado multidimensional clásico. La función realiza MDS no clásico, que a veces es más flexible que el método clásico.mdscale El MDS no clásico se describe en el ejemplo.El escalado multidimensional no clásico

Reconstrucción de ubicaciones espaciales a partir de distancias no espaciales

Supongamos que ha medido la "distancia" genética, o la dessimilitud, entre un número de subpoblaciones locales de una sola especie de animal. También conoce sus ubicaciones geográficas y le gustaría saber cuán estrechamente se corresponden sus distancias genéticas y espaciales. Si lo hacen, eso es evidencia de que la intercría entre las subpoblaciones se ve afectada por sus ubicaciones geográficas.

A continuación se encuentran las ubicaciones espaciales de las subpoblaciones, y el triángulo superior de la matriz de distancias genéticas, en el mismo formato vectorial producido por.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]; 

Aunque este formato vectorial para es eficiente en el espacio, a menudo es más fácil ver las relaciones de distancia si reformatea las distancias a una matriz cuadrada.D

squareform(D) 
 ans =    Columns 1 through 7           0    4.6900    6.7900    3.5000    3.1100    4.4600    5.5700     4.6900         0    2.1000    2.2700    2.6500    2.3600    1.9900     6.7900    2.1000         0    3.7800    4.5300    2.8300    2.4400     3.5000    2.2700    3.7800         0    1.9800    4.3500    2.0700     3.1100    2.6500    4.5300    1.9800         0    3.8000    3.3100     4.4600    2.3600    2.8300    4.3500    3.8000         0    4.3500     5.5700    1.9900    2.4400    2.0700    3.3100    4.3500         0     3.0000    1.7400    3.7900    0.5300    1.4700    3.8200    2.5700    Column 8      3.0000     1.7400     3.7900     0.5300     1.4700     3.8200     2.5700          0  

reconoce cualquiera de los dos formatos.cmdscale

[Y,eigvals] = cmdscale(D); 

primera salida, es una matriz de puntos creados para tener distancias entre puntos que reproducen las distancias.cmdscaleYD Con ocho especies, los puntos (filas de) podrían tener hasta ocho dimensiones (columnas de).YY La visualización de las distancias genéticas depende del uso de puntos en sólo dos o tres dimensiones. Afortunadamente, la segunda salida, es un conjunto de valores propios ordenados cuyas magnitudes relativas indican cuántas dimensiones se pueden utilizar de forma segura.cmdscaleeigvals Si sólo los dos o tres primeros valores son grandes, sólo se necesitan las coordenadas de los puntos para reproducirlos con precisión.YD Si más de tres valores eigenson grandes, entonces no es posible encontrar una buena configuración de puntos de baja dimensión, y no será fácil visualizar las distancias.

[eigvals eigvals/max(abs(eigvals))] 
 ans =     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  

Tenga en cuenta que sólo hay dos grandes valores eigenvalues positivos, por lo que la configuración de los puntos creados por se puede trazar en dos dimensiones.cmdscale Los dos valores eigennegativos indican que las distancias genéticas no son euclidiana, es decir, que ninguna configuración de puntos puede reproducirse exactamente.D Afortunadamente, los valores eigenlos negativos son pequeños en relación con los más grandes positivos, y la reducción a las dos primeras columnas de debe ser bastante precisa.Y Puede comprobarlo observando el error en las distancias entre la configuración bidimensional y las distancias originales.

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

Ahora puede comparar las "ubicaciones genéticas" creadas por las ubicaciones geográficas reales.cmdscale Dado que la configuración devuelta es única hasta la traducción, la rotación y la reflexión, es probable que las ubicaciones genéticas no coincidan con las ubicaciones geográficas.cmdscale También tendrán la escala equivocada. Pero puede utilizar el comando para hacer coincidir los dos conjuntos de puntos mejor en el sentido de mínimos cuadrados.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'); 

Esta gráfica muestra la mejor coincidencia de los puntos reconstruidos en las mismas coordenadas que las ubicaciones espaciales reales. Aparentemente, las distancias genéticas tienen un estrecho vínculo con las distancias espaciales entre las subpoblaciones.

Visualizando una matriz de correlación mediante el escalado multidimensional

Supongamos que ha calculado la siguiente matriz de correlación para un conjunto de 10 variables. Es obvio que estas variables están todas positivamente correlacionadas, y que hay algunas correlaciones muy fuertes por parejas. Pero con estas muchas variables, no es fácil obtener una buena sensación de las relaciones entre los 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     ]; 

El escalado multidimensional se considera a menudo como una forma de (re) construir puntos usando solo distancias en pares. Pero también se puede utilizar con medidas de dessimilitud que son más generales que la distancia, para visualizar espacialmente cosas que no son "puntos en el espacio" en el sentido habitual. Las variables descritas por Rho son un ejemplo, y se puede utilizar para trazar una representación visual de sus interdependencias.cmdscale

En realidad, la correlación mide la similitud, pero es fácil transformarla en una medida de dessimilitud. Debido a que todas las correlaciones aquí son positivas, puede simplemente utilizar

D = 1 - Rho; 

aunque otras opciones también pueden tener sentido. Si contenía correlaciones negativas, tendría que decidir si, por ejemplo, una correlación de-1 indicaba más o menos de una dissimilitud que una correlación de 0, y elegir una transformación en consecuencia.Rho

Es importante decidir si la visualización de la información en la matriz de correlación es incluso posible, es decir, si el número de dimensiones se puede reducir de diez a dos o tres. Los valores propios devueltos le dan una manera de decidir.cmdscale En este caso, una gráfica de Pedregal de esos valores autovalores indica que dos dimensiones son suficientes para representar las variables. (Tenga en cuenta que algunos de los valores propios de la gráfica siguiente son negativos, pero pequeños en relación con los dos primeros.)

[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'); 

En un conjunto de variables más independiente, es posible que se necesiten más dimensiones. Si se necesitan más de tres variables, la visualización no es tan útil.

Una gráfica 2-D de la configuración devuelta indica que hay dos subconjuntos de variables que están más estrechamente correlacionados entre sí, además de una única variable que es más o menos por sí misma.cmdscale Uno de los racimos es apretado, mientras que el otro es relativamente suelto.

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]) 

Por otro lado, los resultados de la siguiente matriz de correlación indican una estructura muy diferente: no hay grupos reales entre las variables.cmdscale Más bien, hay una especie de dependencia "circular", donde cada variable tiene un par de "vecinos más cercanos" pero está menos bien correlacionada con las variables restantes.

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 =      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]) 

Una comparación entre el análisis de componentes principales y el escalado multidimensional clásico

El escalado multidimensional se utiliza con mayor frecuencia para visualizar datos cuando solo están disponibles sus distancias o sus diferencias. Sin embargo, cuando los datos originales están disponibles, el escalado multidimensional también se puede utilizar como método de reducción de dimensiones, reduciendo los datos a una matriz de distancia, creando una nueva configuración de puntos utilizando y conservando solo las primeras dimensiones de esas Puntos.cmdscale Esta aplicación de escalado multidimensional es muy similar al análisis de componentes principales, y de hecho, cuando se llama utilizando las distancias euclidiana entre los puntos, los resultados son idénticos a PCA, hasta un cambio en el signo.cmdscale

n = 10; m = 5; X = randn(n,m); D = pdist(X,'Euclidean');  [Y,eigvals] = cmdscale(D); [PC,Score,latent] = pca(X);  Y 
 Y =     -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 =     -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  

Incluso los valores eigenlos distintos de cero son idénticos hasta un factor de escala.

[eigvals(1:m) (n-1)*latent] 
 ans =     36.9993   36.9993    21.3766   21.3766     7.5792    7.5792     2.2815    2.2815     1.5981    1.5981