Escalado Multidimensional

Representar un conjunto finito cuando disponemos de una distancia entre los elementos del conjunto, consiste en encontrar unos puntos en un espacio de dimesion reducida, cuyas distancias euclídeas se aproximen lo mejor posible a las distancias originales.

MDS devuelve una solución óptima para representar los datos en un espacio de dimensiones inferiores, donde el analista especifica previamente el número de dimensiones k. Por ejemplo, elegir k = 2 optimiza las ubicaciones de los objetos para un diagrama de dispersión bidimensional.

Un algoritmo MDS toma como datos de entrada la matriz de las distancias entre pares de objetos.

Escalado multidimensional clásica

Conserva la distancia métrica original, entre puntos, lo mejor posible. Esas son las distancias ajustadas en el mapa MDS y las distancias originales están en la misma métrica. Classic MDS pertenece a la denominada categoría de escala multidimensional métrica.

También se conoce como análisis de coordenadas principales. Es adecuado para datos cuantitativos.

Ejemplos

# con state.x77
head(state.x77,2)
##         Population Income Illiteracy Life Exp Murder HS Grad Frost   Area
## Alabama       3615   3624        2.1    69.05   15.1    41.3    20  50708
## Alaska         365   6315        1.5    69.31   11.3    66.7   152 566432
state_dist<-dist(state.x77,method = "euclidian")
cmdscale(state_dist)->cmd_state
cmd_state<-as.data.frame(cmd_state)
ggplot(cmd_state,aes(x=V1,
                     y=V2,
                     label=rownames(state.x77)))+
  geom_text(alpha=0.8,size=3,col="salmon")

# con USCitiesD

print(UScitiesD)
##               Atlanta Chicago Denver Houston LosAngeles Miami NewYork
## Chicago           587                                                
## Denver           1212     920                                        
## Houston           701     940    879                                 
## LosAngeles       1936    1745    831    1374                         
## Miami             604    1188   1726     968       2339              
## NewYork           748     713   1631    1420       2451  1092        
## SanFrancisco     2139    1858    949    1645        347  2594    2571
## Seattle          2182    1737   1021    1891        959  2734    2408
## Washington.DC     543     597   1494    1220       2300   923     205
##               SanFrancisco Seattle
## Chicago                           
## Denver                            
## Houston                           
## LosAngeles                        
## Miami                             
## NewYork                           
## SanFrancisco                      
## Seattle                678        
## Washington.DC         2442    2329
cmdscale(UScitiesD)->mds_cities
as.data.frame(mds_cities)->mds_cities_df

ggplot(mds_cities_df,
       aes(x=V1,y=V2,
       label=rownames(mds_cities)))+
  geom_text(alpha=0.7,size=3,col="steelblue")

##podemos aplicar una rotacion de 180 grados
mds_cities%*%matrix(c(-1,0,0,-1),2,2)->mds_cities
as.data.frame(mds_cities)->mds_cities_df
ggplot(mds_cities_df,
       aes(x=V1,y=V2,
       label=rownames(mds_cities)))+
  geom_text(alpha=0.7,size=3,col="red")

# representación en 3D
cars.dist <- dist(scale(mtcars))
cmds3 <- data.frame(cmdscale(cars.dist, k = 3))
scatterplot3d(cmds3, type = "h", pch = 19, lty.hplot = 2)

Analisis de correspondencias (CA)

El Análisis de Correspondencias (AC) es una técnica multivariante que permite representar las categorías de las filas y las columnas de una tabla de contingencia.

El análisis de correspondencia (CA) es una extensión del análisis de componentes principales adecuado para explorar las relaciones entre variables cualitativas (o datos categóricos). Al igual que el análisis de componentes principales, proporciona una solución para resumir y visualizar el conjunto de datos en gráficos de dos dimensiones. Aquí, describimos el análisis de correspondencia simple, que se utiliza para analizar las frecuencias formadas por dos datos categóricos, una tabla de datos conocida como tabla de contenido. Proporciona puntajes de factores (coordenadas) para los puntos de fila y columna de la tabla de contingencia. Estas coordenadas se utilizan para visualizar gráficamente la asociación entre elementos de fila y columna en la tabla de contingencia.

Al analizar una tabla de contingencia bidireccional, una pregunta típica es si ciertos elementos de fila están asociados con algunos elementos de elementos de columna. El análisis de correspondencia es un enfoque geométrico para visualizar las filas y columnas de una tabla de contingencia bidireccional como puntos en un espacio de baja dimensión, de modo que las posiciones de los puntos de fila y columna sean consistentes con sus asociaciones en la tabla. El objetivo es tener una visión global de los datos que sea útil para la interpretación.

Ejemplo de AC

head(housetasks)
##            Wife Alternating Husband Jointly
## Laundry     156          14       2       4
## Main_meal   124          20       5       4
## Dinner       77          11       7      13
## Breakfeast   82          36      15       7
## Tidying      53          11       1      57
## Dishes       32          24       4      53
chisq <- chisq.test(housetasks)
chisq
## 
##  Pearson's Chi-squared test
## 
## data:  housetasks
## X-squared = 1944.5, df = 36, p-value < 2.2e-16
library("gplots")
tabla<-as.table(as.matrix(housetasks))

balloonplot(t(tabla), main ="Tareas en el hogar", xlab ="", ylab="",label = FALSE, show.margins = FALSE)

library("corrplot")

CA(housetasks,graph=F)->ca_ht
get_ca_row(ca_ht)->filas


# Representación de las filas
head(filas$coord,3)
##                Dim 1     Dim 2      Dim 3
## Laundry   -0.9918368 0.4953220 -0.3167290
## Main_meal -0.8755855 0.4901092 -0.1640649
## Dinner    -0.6925740 0.3081043 -0.2074138
head(filas$contrib,3)
##               Dim 1    Dim 2    Dim 3
## Laundry   18.286700 5.563891 7.968424
## Main_meal 12.388843 4.735523 1.858689
## Dinner     5.471398 1.321022 2.096926
#El cos2 mide el grado de asociación entre filas / columnas y un eje particular.

head(filas$cos2)
##                Dim 1     Dim 2      Dim 3
## Laundry    0.7399874 0.1845521 0.07546047
## Main_meal  0.7416028 0.2323593 0.02603787
## Dinner     0.7766401 0.1537032 0.06965666
## Breakfeast 0.5049433 0.4002300 0.09482670
## Tidying    0.4398124 0.5350151 0.02517249
## Dishes     0.1181178 0.6461525 0.23572969
#Gráfico   de filas
fviz_ca_row(ca_ht, col.row = "cos2",
             gradient.cols = c("orange", "yellow","salmon"), 
             repel = TRUE)

corrplot(filas$cos2, is.corr=FALSE)

#representacion de las columnas
get_ca_col(ca_ht)->cols
head(cols$coord,3)
##                   Dim 1     Dim 2      Dim 3
## Wife        -0.83762154 0.3652207 -0.1999114
## Alternating -0.06218462 0.2915938  0.8485894
## Husband      1.16091847 0.6019199 -0.1888592
head(cols$contrib,3)
##                 Dim 1     Dim 2     Dim 3
## Wife        44.462018 10.312237 10.822075
## Alternating  0.103739  2.782794 82.549246
## Husband     54.233879 17.786612  6.133179
head(cols$cos2,3)
##                   Dim 1     Dim 2      Dim 3
## Wife        0.801875947 0.1524482 0.04567585
## Alternating 0.004779897 0.1051016 0.89011852
## Husband     0.772026244 0.2075420 0.02043173
fviz_ca_col(ca_ht, col.col = "cos2", 
             gradient.cols = c("yellow","salmon","steelblue"),
             repel = TRUE)

#Representacion de filas y columnas

fviz_ca_biplot(ca_ht, repel = TRUE)