Definición general
Los datos, a menudo pueden representarse, además de la matriz/tabla de registros y campos,también como matriz de proximidades (englobando matriz de distancias y matriz de similaridades).
El Escalado Multidimensional pretende descubrir estructuras que pudiera esconder la matriz de proximidades, deteminando:
- Las \(k \leq p\) dimensiones que aporten un ajuste satisfactorio.
- Las coordenadas de los puntos que, una vez representadas en el espacio, permitirán visualizar las proximidades existentes entre puntos.
Escalado Multidimensional Métrico Euclídeo y no Euclídeo
Objetivo: Reconstruir la matriz de datos a partir la matriz de proximidades dada.
Reconstrucción de la matriz de datos a partir de la matriz de distancias
Dada una matriz de distancias \(\textbf{D}=(d_{ij})_{n\times n}\), pretendemos obtener la matriz de datos \(\textbf{X}_{n\times p}\).
La matriz de datos \(\text{X}\)
\[ \textbf{X}= \begin{array} {|cc|} x_{11} & x_{1j} & x_{1p} \\ x_{i1} & x_{ij} & x_{ip} \\ x_{n1} & x_{nj} & x_{np} \end{array} \]
La matriz \(\textbf{B}\) generada de \(\textbf X\)
\[ \textbf B=\textbf X\textbf X^t \]
La relación de la matriz \(\textbf B\) con la matriz de distancias \(\textbf D\)
Se puede demostrar que \(\textbf B\) está relacionada con \(\textbf D\) por la función:
\[ b_{ij}=-\frac{1}{2}(d_{ij}^2-\frac{1}{n}\sum_{1=j}^nd_{ij}^2- \frac{1}{n}\sum_{1=i}^nd_{ij}^2 +\frac{1}{n^2}\sum_{1=j}\sum_{1=i}^nd_{ij}^2 ) \]
La descomposición espectral de \(\textbf B\)
\[ \textbf B = \textbf{VΔV}^t \]
\(\textbf{Δ}\) es la matriz diagonal de autovalores (eigenvalues) de \(\textbf{B}\), \(\lambda_1\geq\lambda_2\geq ...\geq \lambda_n\).
\(\textbf V\) es la matriz de autovectores de \(\textbf B\).
Con una matriz inicial \(\textbf X\) de rango completo, el rango de \(\textbf B\) sería \(p\) y sus últimos \(n-p\) autovalores serían \(0\) y \(\textbf B\) se puede escribir como
\[ \textbf B =\textbf U_1Δ_1\textbf{U}_1^t \]
\(\textbf U_1\) es la matriz que contiene los primeros autovectores de \(\textbf B\).
\(\textbf{Δ}_1\) son autovalores de \(\textbf B\) distintos de \(0\).
Lo anterior quedará finalmente así:
\[ \textbf X =\textbf U_1\textbf{Δ}_1^{1/2} \]
Donde \(\textbf{Δ}_1^{1/2}\) es una matriz diagonal de valores \(\sqrt\lambda_1\geq\sqrt\lambda_2\geq ...\geq \sqrt\lambda_n\).
Estas coordenadas que se determinan para \(\textbf X\) son los scores que se hubieran obtenido en un análisis de componentes principales de \(\textbf X\). Por ello el Escalado Multidimensional también se puede denominar Análisis de Coordenadas Principales.
Matriz de Proximidades Euclídea y no Euclídea
Si la matriz \(\textbf B\) obtenida a partir de \(\textbf D\) es euclídea sus \(n-1\) primeros autovalores \(\lambda_i\) serán positivos y el último será \(0\). Decidiremos representar los datos en un espacio de \(k\) dimensiones si el cociente
\[ \frac{\sum_{i=1}^k \lambda_i}{\sum_{i=1}^{n-1}\lambda_i} \]
será suficientemente grande (0.8 o más).
En muchos casos, la matriz de proximidades será no Euclídea y así los autovalores no serán todos positivos. Los últimos autovalores de \(\textbf B\) serán negativos. Sin embargo, si son pocos y pequeños, se pueden utilizar los autovectores de los primeros autovalores como coordenadas.
Criterios para elección de la dimensión \(k\):
\[ \frac{\sum_{i=1}^k \lambda_i}{\sum_{i=1}^{n}|\lambda_i|} \] es suficientemente grande, o
\[ \frac{\sum_{i=1}^k \lambda_i^2}{\sum_{i=1}^{n}\lambda_i^2} \] es suficientemente grande.
Teoría según Método Nottingham
Ver R. Wilkinson, Applied multivariate statistics 6.1, University of Nottingham, 2026.
En el MDS clásico, no trabajamos directamente con la matriz de distancia, sino con la matriz de producto interno centrado.
La matriz de producto interno centrado
Definición
Dada una matriz de distancias \(\textbf D =\{d_{ij}\}_{i,j=1}^n\), la matriz de producto interno centrado (también llamada matriz de Gram centrada) es
\[ \begin{equation} {\mathbf B}={\mathbf H} \mathbf A{\mathbf H} \end{equation} \]
Matriz de distancias cuadradas negativas
donde \(\mathbf A\) es la matriz de distancias cuadradas negativas dividida por dos:
\[ \begin{equation} \mathbf A=\{a_{ij}\}_{i,j=1}^n, \quad \text{donde} \qquad a_{ij}=-\frac{1}{2}d_{ij}^2 \end{equation} \]
Matriz de centrado
y \(\mathbf H\) es la matriz de centrado \(n × n\) (ver 2.4 del mismo manual).
\[ \begin{equation} \mathbf H=\mathbf I_n - \frac{1}{n} {\mathbf 1}_n {\mathbf 1}_n^\top. \tag{2.2} \end{equation} \]
Matriz de distancias cuadradas negativas - otra definición
Otra manera de escribir la ecuación es
\[ \mathbf A= -\frac{1}{2}\mathbf D\odot \mathbf D \]
donde \(\odot\) denota el producto Hadamard (o producto elemento a elemento de dos matrices (que sería un producto no matricial).
La ecuación se puede mejor presentar de esta forma \[ \mathbf B=-\frac{1}{2}\mathbf H(\mathbf D\odot\mathbf D)\mathbf H \]
Teorema
Siendo \(\mathbf D\) una matriz de distancia \(n×n\) con una matriz de producto interno centrada correspondiente \(\mathbf B=-\frac{1}{2}\mathbf H(\mathbf D\odot\mathbf D)\mathbf H\),
- Si \(\textbf D\) es una matriz de distancia euclidiana para la muestra de \(n\) vectores \(x_1,x_2,...x_n\), entonces
\[ \begin{equation} \mathbf B= ({\mathbf H} {\mathbf X})({\mathbf H} {\mathbf X})^\top \end{equation} \] Así, \(\textbf B\) es positiva semi-definida.
- Suponiendo que que \(\textbf B\) es semidefinida positiva con valores propios \(\lambda_1 \geq \lambda_2 \cdots \geq \lambda_k > 0\) y que tiene descomposición espectral \(\mathbf B={\mathbf U} {\pmb \Lambda}{\mathbf U}^\top\), donde \({\pmb \Lambda}=\text{diag}\{\lambda_1 \ldots \lambda_k\}\) y \(\textbf U\), es \(n × k\) y satisface \({\mathbf U}^\top {\mathbf U}={\mathbf I}_k\). Entonces \[ {\mathbf X}=[\mathbf x_1, \ldots , \mathbf x_n]^\top={\mathbf U}{\pmb \Lambda}^{1/2} \] es una matriz de datos \(n \times k\) con una matriz de distancias euclídeas \(\textbf D\).
La matriz de producto interno centrado con R
Datos
## [,1] [,2]
## [1,] 0 0
## [2,] 1 0
## [3,] 0 1
## [4,] -1 0
## [5,] 0 -1
Matriz de distancas
## 1 2 3 4 5
## 1 0 1.000000 1.000000 1.000000 1.000000
## 2 1 0.000000 1.414214 2.000000 1.414214
## 3 1 1.414214 0.000000 1.414214 2.000000
## 4 1 2.000000 1.414214 0.000000 1.414214
## 5 1 1.414214 2.000000 1.414214 0.000000
Matriz de distancias cuadradas negativas
# A: matriz de distancias cuadradas negativas
A <- - D*D/2 # Producto negativo elemento a elemento, dividido por 2
A## 1 2 3 4 5
## 1 0.0 -0.5 -0.5 -0.5 -0.5
## 2 -0.5 0.0 -1.0 -2.0 -1.0
## 3 -0.5 -1.0 0.0 -1.0 -2.0
## 4 -0.5 -2.0 -1.0 0.0 -1.0
## 5 -0.5 -1.0 -2.0 -1.0 0.0
Matriz de centrado
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.8 -0.2 -0.2 -0.2 -0.2
## [2,] -0.2 0.8 -0.2 -0.2 -0.2
## [3,] -0.2 -0.2 0.8 -0.2 -0.2
## [4,] -0.2 -0.2 -0.2 0.8 -0.2
## [5,] -0.2 -0.2 -0.2 -0.2 0.8
Matriz de producto interno centrado
## [,1] [,2] [,3] [,4] [,5]
## [1,] -2.775558e-17 2.775558e-17 2.775558e-17 4.163336e-17 5.551115e-17
## [2,] -3.122502e-17 1.000000e+00 -2.255141e-16 -1.000000e+00 -2.081668e-16
## [3,] 2.775558e-17 -1.387779e-16 1.000000e+00 -1.665335e-16 -1.000000e+00
## [4,] 5.204170e-17 -1.000000e+00 -1.422473e-16 1.000000e+00 -1.526557e-16
## [5,] 8.326673e-17 -1.387779e-16 -1.000000e+00 -1.665335e-16 1.000000e+00
Control
Redondeando a 4 decimales la matriz \(\textbf B\) obtenida (R prouce valores infinitesimales de redondeo), obtenemos la siguiente
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0 0 0 0 0
## [2,] 0 1 0 -1 0
## [3,] 0 0 1 0 -1
## [4,] 0 -1 0 1 0
## [5,] 0 0 -1 0 1
Según el Teorema es
\[ \begin{equation} \mathbf B= ({\mathbf H} {\mathbf X})({\mathbf H} {\mathbf X})^\top \end{equation} \]
Lo que queda, confirmado por los datos de R:
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0 0 0 0 0
## [2,] 0 1 0 -1 0
## [3,] 0 0 1 0 -1
## [4,] 0 -1 0 1 0
## [5,] 0 0 -1 0 1
Escalado Multidimensional con R
La obtención de la matriz de datos X a partir de la matriz de proximidades puede puede hacers con la función \[\texttt{cmdscale(d,k,eig)} \]
d: Matriz de proximidades.
k: dimensiones del espacio en que representar los datos
(2, por defecto).
eig: Es la opción de obtener o no (T/F) los
autovalores mencionados.
Ejemplos
Ejemplo 1 de obtención de coordenadas a a partir de la función \(\texttt{cmdscale()}\)
Datos obtenidos en R. Wilkinson, Applied multivariate statistics 6., University of Nottingham, 2026.
Datos y manipulaciones previas
library(dplyr)
dfcities <- as.data.frame(readxl::read_xlsx("EAAR/UKcitydist.xlsx"))
rownames(dfcities) <- dfcities$...1
dmatrix <- dfcities %>%
select(-1) %>%
as.matrix()
dmatrix## London Birmingham Manchester Leeds Newcastle Liverpool Portsmouth
## London 0 163 262 273 403 286 103
## Birmingham 163 0 114 149 282 125 195
## Manchester 262 114 0 58 174 50 308
## Leeds 273 149 58 0 135 105 335
## Newcastle 403 282 174 135 0 199 469
## Liverpool 286 125 50 105 199 0 317
## Portsmouth 103 195 308 335 469 317 0
## Southampton 112 179 293 323 458 299 24
## Nottingham 175 73 94 98 231 132 239
## Bristol 170 124 227 271 401 219 127
## Sheffield 228 105 53 47 181 101 288
## Norwich 159 217 255 230 328 299 261
## Plymouth 308 281 369 420 542 346 221
## Southampton Nottingham Bristol Sheffield Norwich Plymouth
## London 112 175 170 228 159 308
## Birmingham 179 73 124 105 217 281
## Manchester 293 94 227 53 255 369
## Leeds 323 98 271 47 230 420
## Newcastle 458 231 401 181 328 542
## Liverpool 299 132 219 101 299 346
## Portsmouth 24 239 127 288 261 221
## Southampton 0 229 103 276 268 202
## Nottingham 229 0 193 53 169 353
## Bristol 103 193 0 228 296 162
## Sheffield 276 53 228 0 203 382
## Norwich 268 169 296 203 0 453
## Plymouth 202 353 162 382 453 0
Análisis de autovalores con \(\texttt{cmdscale()}\)
## [1] 2.832068e+05 9.662516e+04 2.996738e+02 2.558621e+02 1.423145e+02
## [6] 9.662094e+01 5.613665e+01 3.410386e+01 -8.753887e-12 -6.758398e+01
## [11] -1.780337e+02 -3.042158e+02 -3.431856e+02
Como podemos ver, en las últimas posiciones existen valores negativos, lo que nos indica que las proximidades no son perfectamente euclídeas.
Vamos pues a analizar los cocientes vistos arriba, para \(k=2\):
\[ \frac{\sum_{i=1}^k \lambda_i}{\sum_{i=1}^{n-1}|\lambda_i|} \]
## [1] 0.9962374
\[ \frac{\sum_{i=1}^k \lambda_i^2}{\sum_{i=1}^{n-1}\lambda_i^2} \]
## [1] 0.9999964
En ambos casos, se puede apreciar como las \(k=2\) dimensiones capturan una fracción altísima de la suma de autovalores. Es por lo tanto viable la representación bidimensional de las \(k\) coordenadas.
Representación gráfica de las coordenadas
plot(cmdscale(dmatrix)[,1],cmdscale(dmatrix)[,2],
xlab = "Primera coordenada",ylab = "Segunda coordenada")
text(cmdscale(dmatrix)[,1], cmdscale(dmatrix)[,2],rownames(cmdscale(dmatrix)))El mapa es substancialmente correcto pero está rotado de \(90^o\) y las coordenadas tiene promedio \(0\).
Ejemplo 2
Datos obtenidos de EAAR, capítulo 41.
Se trata de datos de proximidad de 12 países generados por encuesta en España:
paises <- c("C. de Marfil", "Cuba", "Venezuela", "Egipto", "UK", "India",
"Israel", "Japón", "China", "Rusia", "USA", "España")
matrix(paises)## [,1]
## [1,] "C. de Marfil"
## [2,] "Cuba"
## [3,] "Venezuela"
## [4,] "Egipto"
## [5,] "UK"
## [6,] "India"
## [7,] "Israel"
## [8,] "Japón"
## [9,] "China"
## [10,] "Rusia"
## [11,] "USA"
## [12,] "España"
Matriz de distancias
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] 0.0 7.5 8.5 6.0 9.5 7.0 8.0 9.5 5.5 8.5 9.5 9.0
## [2,] 7.5 0.0 2.0 5.0 7.5 5.0 2.0 9.0 5.5 6.0 9.0 6.0
## [3,] 8.5 2.0 0.0 7.5 8.0 8.5 2.0 9.0 9.0 8.0 7.5 5.5
## [4,] 6.0 5.0 7.5 0.0 8.0 5.5 7.5 7.0 7.5 8.0 8.0 9.0
## [5,] 9.5 7.5 8.0 8.0 0.0 6.0 2.0 5.0 7.5 6.5 1.5 2.0
## [6,] 7.0 5.0 8.5 5.5 6.0 0.0 7.5 7.5 6.0 7.5 7.5 9.0
## [7,] 8.0 2.0 2.0 7.5 2.0 7.5 0.0 2.0 2.0 2.5 3.0 0.5
## [8,] 9.5 9.0 9.0 7.0 5.0 7.5 2.0 0.0 2.5 6.0 2.0 4.5
## [9,] 5.5 5.5 9.0 7.5 7.5 6.0 2.0 2.5 0.0 4.5 6.5 6.5
## [10,] 8.5 6.0 8.0 8.0 6.5 7.5 2.5 6.0 4.5 0.0 5.0 6.0
## [11,] 9.5 9.0 7.5 8.0 1.5 7.5 3.0 2.0 6.5 5.0 0.0 2.5
## [12,] 9.0 6.0 5.5 9.0 2.0 9.0 0.5 4.5 6.5 6.0 2.5 0.0
Análisis de los autovalores
## [1] 1.101409e+02 7.176177e+01 4.345015e+01 2.937512e+01 2.148003e+01
## [6] 1.501705e+01 4.592181e+00 1.776357e-14 -3.241329e+00 -1.007454e+01
## [11] -1.998470e+01 -2.437084e+01
- \[ \frac{\sum_{i=1}^k \lambda_i}{\sum_{i=1}^{n-1}|\lambda_i|} \]
## [1] 0.5145928
- \[ \frac{\sum_{i=1}^k \lambda_i^2}{\sum_{i=1}^{n-1}\lambda_i^2} \]
## [1] 0.7910665
Tal y como se puede observar, el primer cociente es bastante bajo. Sin embargo, el segundo es suficiente para poder representar las \(k=2\) dimensiones.
Representación gráfica de las coordenadas
plot(cmdscale(p)[,1],cmdscale(p)[,2],
xlab = "Primera coordenada",ylab = "Segunda coordenada")
text(cmdscale(p)[,1], cmdscale(p)[,2])Representación gráfica de las coordenadas con \(\texttt{ggplot2}\)
library(ggplot2)
rownames(p) <- paises
p1 <- data.frame(cmdscale(p)) %>%
tibble::rownames_to_column("País")
p1 %>%
ggplot(aes(x=X1, y=X2)) +
geom_point() +
ggrepel::geom_text_repel(aes(label= País)) +
xlab("Dimensión 1") +
ylab("Dimensión 2")Escalado Multidimensional no Métrico
Hasta este punto, la matriz de proximidades tenía un valor métrico: una distancia 2 se entendía como el doble de una distancia 1. En muchos casos (ciencias del comportamiento), en los que se trata de juicios de valor, la matriz representa ya no distancias sino ordenaciones.
En este caso se trabajará con la función de la librería \(MASS\) \(,\texttt{isoMDS(d,k)}\). \(\texttt{d}\) es la matriz, \(\texttt{k}\) es el número de dimensiones en el espacio en que representar los puntos.
Una medida de la bondad de la \(k\) elegida, es \(stress\).
- Mayor de 20 puntos, Pobre.
- 20-10 puntos, Razonable.
- 10-5 puntos, Buena.
- 5-2.5 puntos, Excelente.
- Menor de 2.5 puntos, Perfecta.
Ejemplo 3 (sobre datos de ejemplo 2)
Ejecución de la función
## initial value 22.013391
## iter 5 value 16.278431
## final value 16.235616
## converged
## $points
## [,1] [,2]
## C. de Marfil -6.4218745 1.8066001
## Cuba -2.0913650 -1.8517701
## Venezuela -0.6750485 -5.1552200
## Egipto -4.6640368 -0.5992696
## UK 3.8877607 0.1376858
## India -2.6655991 3.0347480
## Israel 1.1433001 -1.5836915
## Japón 3.2008829 2.8951639
## China -0.6211791 2.5329630
## Rusia 1.8665246 1.5309132
## USA 4.7873080 -0.4208432
## España 2.2533267 -2.3272795
##
## $stress
## [1] 16.23562
Como se puede ver, la función nos facilita un dato de stress razonable (16.2) y las coordenadas que se pueden representar.
Representación gráfica
## initial value 22.013391
## iter 5 value 16.278431
## final value 16.235616
## converged
p2 %>%
ggplot(aes(x=X1, y=X2)) +
geom_point() +
ggrepel::geom_text_repel(aes(label= País)) +
xlab("Dimensión 1") +
ylab("Dimensión 2")Con una representación bastante similar a la realizada a partir de la
función cmdscale().
Siempre que citamos EAAR en este documento, nos referimos a: A. García Perez, Estadística aplicada avanzada con R, Madrid, 2022↩︎