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.
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.
# 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)
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.
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)