Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ordenación I
Referencias
Si además de la altura queremos representar el peso de estos mismos individuos, para ver la
relación de ambas variables —por ejemplo ver si el peso aumenta con la altura—, necesitaríamos
dos ejes para representar toda la información:
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 1/27
7/2/2021 Análisis multivariante. Ordenación I
Os imagináis por donde vamos, ¿verdad?. Si queremos ver esas relaciones con 3, 4, … 100, … 500,
variables, necesitaríamos otros tantos ejes y esto ya se escapa de nuestra capacidad de
representación y casi que entendimiento.
Si encontramos que existe una cierta correlación entre dos variables, podemos encontrar una
función que las relacione, de manera que podríamos construir una nueva variable que sea
combinanción lineal de las anteriores y que aglutine prácticamente toda la información —puede
haber una pequeña pérdida de la misma—. En este caso, los datos de la nueva variable quedarían
representados así:
Como podemos, ver la nueva variable —que contiene la información combinada de peso y altura—
por si sóla explica bastante bien la distribución de los individuos, solamente hay una mínima
cantidad de información que no queda recogida por esta variable, pero que la recoge otra variable
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 2/27
7/2/2021 Análisis multivariante. Ordenación I
denominada en este gráfico nueva variable 2. Para conseguirlo, aparentemente lo único que
hemos tenido que hacer es rotar los datos 45o —realmente lo que hemos rotado han sido lo ejes—.
Las correlaciones entre las variables, por desgracia —o por suerte— no son perfectas, no tienen
correlación 1 o -1, sino que el azar, aleatoriedad, diversidad, variabilidad, o como lo queramos
llamar, hace que nos alejemos de esa correlación perfecta y por tanto necesitemos otra variable
que recoja esas “migajas” de información que le ha dejado la primera nueva variable. Ahora la
nueva variable tiene una información —mucha— y la nueva variable 2 tiene otra —muy poca—,
pero lo importante es que estas dos variables no comparten nada de información entre ellas, son
icorreladas.
En resumen, lo que queremos decir con esto, es que las técnicas multivariantes, son en general un
conjunto de técnicas que intentan reducir las dimensiones de los datos originales, creando nuevas
variables que nos permitan “ver el retrato” de nuestros datos con el mínimo número de variables
posible y de esta manera podamos interpretar las relaciones existente entre los individuos basadas
en todas estas variables.
Cuanta mayor correlación haya entre las variables originales, mayor será el número de individuos
explicados por la primera componente, y por tanto menos información quedará para ser explicada
por la siguiente.
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 3/27
7/2/2021 Análisis multivariante. Ordenación I
La interpretación de los factores es la clave del análisis, y es algo que no viene dado por el propio
análisis, sino que hay que deducirlo después de observar la relación entre las variables y los
factores.
Definiciones no formales
Matriz de correlaciones:
el PCA sólo tiene sentido si hay alta correlación entre variables, por tanto la matriz de
correlaciones entre las variables puede ser un buen punto de partida.
Factores:
o componentes principales, son cada una de las nuevas variables, combinación lineal de las
originales.
Matriz factorial:
matriz que contiene los coeficientes factoriales, es decir, las correlaciones entre componentes
(columnas) y las variables originales (filas).
Autovalores:
o valores propios o eigenvalues, representan las varianzas de los factores. Ordenadas de mayor a
menor.
Autovectores:
o vectores propios o eigenvectors, se corresponden con las columnas de la matriz factorial. Cada
columna un autovector.
install.packages( "FactoMineR" )
install.packages( "factoextra" )
install.packages( "corrplot" )
install.packages( "psych" )
install.packages( "Factoshiny" )
install.packages( "rgl" )
Grupo Peso Altura Pie Hombros Brazos Caderas Sexo Ojos Tipo
1 1 60 163 37 41 68 95 1 1 2
2 1 52 166 37 37 70 87 1 2 1
3 1 61 172 39 39 69 91 1 2 1
4 1 73 181 43 50 78 101 2 2 1
5 1 53 172 39 39 72 89 1 1 1
6 1 63 169 40 37 66 96 1 2 1
Las variables grupo, sexo, ojos y tipo, a pesar de ser numéricas, no están representando una
medida sino una categoría. Estas variables son conocidas en R como factores que no hay que
confundir con las componentes pricipales que en ocasiones también se denominan factores.
Estadísticos descriptivos
De forma preliminar, podemos obtener una serie de estadísticos básicos que nos sirven para
conocer un poco nuestros datos. Esto se podría hacer con la función summary
summary(biom[,2:7])
Aunque si queremos personalizar los estadísticos y sacarlos en forma de una tabla más manejable
puede hacerse de la siguiente manera
bm <- biom[,2:7]
biom_summary <- data.frame( Min = apply( bm, 2, min ),
Q1 = apply( bm, 2, quantile, 1/4 ),
Mediana = apply( bm, 2, median ),
Media = apply( bm, 2, mean ),
Q3 = apply( bm, 2, quantile, 3/4 ),
Max = apply( bm, 2, max ),
Var = apply( bm, 2, var ) )
( biom_summary )
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 5/27
7/2/2021 Análisis multivariante. Ordenación I
Vimos en la introducción que lo adecuado era trabajar con los datos tipificados, y que la matriz de
correlaciones era la matriz de covarianzas de datos tipificados. Vamos a calcular esa matriz de
correlaciones y visualizar las relaciones entre las variables.
pairs( bm )
y también podemos visualizar esas dependencias entre las varibles mediante un correlograma
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 6/27
7/2/2021 Análisis multivariante. Ordenación I
Esto nos permite ver que existen variables altamente correlacionadas como Altura y Peso o
Altura y Pie y otras muy poco correlacionas como Brazos y Caderas o Pie y Caderas .
Numéricamente, hay distintas técnicas para determinar si existe una alta correlaciones en datos
multivariantes de forma conjunta que justifiquen el hacer un PCA. Uno de ellos es el índice de
Kaiser-Meyer-Olkin (KMO), que compara los valores de correlaciones entre pares de variables. El
punto de partida de ese índice es una matriz de correlaciones entre las variables observadas. Si el
índice es próximo a 1 el PCA se puede hacer, mientras que si es próximo a 0, el PCA no será
relevante.
También podemos ver las relaciones entre individuos y variables mediante gráficos de estrellas.
Este gráfico nos da idea que cuánto pesa cada variable sobre cada individuo.
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 7/27
7/2/2021 Análisis multivariante. Ordenación I
También podemos colorear a los individuos en base a alguna categoría como por ejemplo según su
sexo
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 8/27
7/2/2021 Análisis multivariante. Ordenación I
name description
1 "$eig" "eigenvalues"
2 "$var" "results for the variables"
3 "$var$coord" "coord. for the variables"
4 "$var$cor" "correlations variables - dimensions"
5 "$var$cos2" "cos2 for the variables"
6 "$var$contrib" "contributions of the variables"
7 "$ind" "results for the individuals"
8 "$ind$coord" "coord. for the individuals"
9 "$ind$cos2" "cos2 for the individuals"
10 "$ind$contrib" "contributions of the individuals"
11 "$call" "summary statistics"
12 "$call$centre" "mean of the variables"
13 "$call$ecart.type" "standard error of the variables"
14 "$call$row.w" "weights for the individuals"
15 "$call$col.w" "weights for the variables"
La función nos devuelve un objeto que contiene toda la información del análisis.
Autovalores
Si quisiésemos acceder a los autovalores para ver la cantidad de varianza acumulada por cada
componente, tendríamos que hacer:
( biom_pca$eig )
Lo que nos indica que la primera componente acumula 4.0267249 de la varianza, lo que supone
un 67.1120816 % del total. La suma de todos los autovalores será igual al número de
componentes:
( sum( biom_pca$eig[ ,1 ] ) )
[1] 6
Vemos que la mayor parte de la varianza queda explicada por la primera componente y que entre
las dos primeras ya se explica un 81.5394307 % de la varianza. Con lo que hemos pasado de tener
6 variables para explicar nuestros datos, a tener dos componentes que contienen prácticamente
toda la información.
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 9/27
7/2/2021 Análisis multivariante. Ordenación I
Variables
Otros parámetros de interés que nos devuelve el análisis sería:
Coord = cor : son las correlaciones entre las variables originales y los factores (nuevas
variables). Son también las coordenadas de los vectores que representas las variables.
¿Por qué las correlaciones y las coordenadas son iguales? Esto ocurre porque le hemos
pedido a la función que nos tipifique los datos ( scale.unit = TRUE ). Si los datos no se
tipificasen, las coordenadas no estarían en el rango -1 a 1 como lo están siempre las
correlaciones.
Las columnas de la matriz de correlaciones son los autovectores, es decir, los factores que se
aplican sobre los datos para realizar la rotación y obtener las nuevas variables.
cos2: es igual al cuadrado de cor cos2 = cor . Mide la calidad de la representación de las
2
( apply(biom_pca$var$cos2, 1, sum ) )
contrib: Mide el porcentaje de peso de cada variable sobre cada factor. La suma por
columnas es 100.
( apply(biom_pca$var$contrib, 2, sum ) )
Individuos
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 10/27
7/2/2021 Análisis multivariante. Ordenación I
Los parámetros indicados anteriormente en los resultados también se obtienen en el caso de los
individuos, lo que permite hacer una interpretación desde esa perspectiva. Es decir, podríamos ver
qué individuo o individuos son los que más contribuyen o influyen sobre las componentes, ver las
nuevas coordenadas de nuestras observaciones sobre el plano factorial.
Coord : coordenadas de las observaciones sobre el plano factorial. Son los valores que
toman las nuevas variables sobre los individuos. Sería la nueva tabla de datos
head( biom_pca$ind$coord )
Cos2 : Proyección sobre los ejes. Mide la contribución de cada factor sobre un individuo
concreto. La suma por filas será 1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Contrib : Mide el porcentaje de peso de cada individuo sobre un factor. La suma por
columnas es 100.
Dist : La distancia absoluta de cada individuo al origen de coordenadas del plano factorial.
Se calcula, para un individuo concreto, con la fórmula de la distancia euclídea, como la raíz
cuadrada de la suma de las coordenadas de ese individuo al cuadrado.
head( biom_pca$ind$dist, 5 )
1 2 3 4 5
1.5098863 2.0684706 0.9904256 3.3020844 1.3972472
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 11/27
7/2/2021 Análisis multivariante. Ordenación I
1 2 3 4 5
1.5098863 2.0684706 0.9904256 3.3020844 1.3972472
Vimos anteriormente que la suma de cos2 de una variable determinada sobre cada factor es 1. Esto
significa que cada vector debería estar tocando el perímetro de la circunferencia unidad, pero no
lo está haciendo ninguna, ¿por qué?. Si observamos por ejemplo la variable Caderas , vemos que
esta muy cerca de tocar dicho perímetro, su proyección sobre las dimensiones 1 y 2 (componentes)
indica su contribución a éstas, pero aún le falta algo de contribución que debe estar repartida por
otra u otras dimensiones. Si está variable solo tuviese peso sobre las dos primeras dimensiones
estaría tocando la circunferencia.
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 12/27
7/2/2021 Análisis multivariante. Ordenación I
Podemos colorear las observaciones según alguna variable, en este caso el sexo. Además podemos
hacer que las variables que más contribuyen en este plano factorial, se resalten más que las que
menos influencia tienen. También tenemos la posibilidad de dibujar elipses alrededor de cada
grupo con un cierto nivel de confianza.
Todos juntos
Finalmente, igual que en el caso de la representación gráfica manual, podemos hace un gráfico
conocido como biplot donde se representan variables e individuos simultáneamente.
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 13/27
7/2/2021 Análisis multivariante. Ordenación I
Si somos un poco observadores, veremos que este gráfico esta un poco “trucado”. Ya hemos
comentado que la suma total de cos2 para cada variable es 1. Por tanto ningún vector de ninguna
variable puede superar ese valor, sin embargo en esta gráfica, si nos fijamos en la escala vemos
que esto si que sucede. Simplemente es una pequeña licencia para representar de forma conjunta
observaciones y variable, dando más importancia a las coordenadas de las observaciones que a
las de las variables.
Resultados interactivos
Factoshiny::PCAshiny(bm)
Esta función arranca una aplicación shiny en el navegador, donde se puede interactuar con los
resultados y los gráficos.
Variables suplementarias
Se pueden añadir variables suplementarias al análisis que no se tienen en cuenta en éste, pero que
pueden ayudar a interpretar los resultados. Estas variables también se conocen variables
ilustrativas.
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 14/27
7/2/2021 Análisis multivariante. Ordenación I
Gráfico a mano
Una vez que hemos visto cómo representar los resultados fácilmente con las distintas funciones
del paquete factoextra, vamos a construir este mismo gráfico a mano, para entender cómo se
construye. Saber cómo están construidos los gráficos siempre facilita tanto la comprensión de la
técnica, como la interpretación de los resultados.
Con este gráfico podríamos también hacer una predicción sobre dónde caería un nuevo individuo y
nos serviría para comprobar si nuestra interpretación está siendo correcta.
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 15/27
7/2/2021 Análisis multivariante. Ordenación I
#añadir direcciones
arrows( 0, 0, x, y, col= rgb( .5, .5, .5 ) , length = 0.15, angle = 10, lwd = 5
arrows( 0, 0, x, y, col = c( 1:6 ), length = 0.15, angle = 10, lwd = 2 )
text( x, y, labels=rownames(biom_pca$var$coord), cex = 0.8, col = c( 1:6 ), adj
## Círculo unidad
symbols( 0, 0, circles = 1, add = TRUE, xlim = c( -0.8, 0.8 ), inches = FALSE )
#añadir observaciones
xc <- biom_pca$ind$coord[, 1]
yc <- biom_pca$ind$coord[, 2]
par( new = TRUE )
simbol <- ifelse( biom$Sexo == 1, 18, 20 )
plot( xc, yc, col = color, type = "p", pch = simbol, xlab = "",
ylab = "", xaxt = "n", yaxt = "n", cex = 1.3 )
#predicción
ni <- as.data.frame( matrix( c( 77, 184, 44, 54, 81, 90 ), nrow = 1 ) )
colnames( ni ) <- colnames( bm )
nuevodato <- predict.PCA( biom_pca, newdata = ni, scale = TRUE )
ndNX<- (nuevodato$coord[1] - mean( biom_pca$ind$coord[,1] ) ) / sd(biom_pca$in
ndNY<- (nuevodato$coord[2] - mean( biom_pca$ind$coord[,2] ) ) / sd(biom_pca$in
points( ndNX, ndNY, pch = 20, cex = 2.5, col = 2 )
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 16/27
7/2/2021 Análisis multivariante. Ordenación I
Con este gráfico podemos observar varias cosas. Por un lado ahora las variables están en su escala,
ya que ninguna pasa de 1 y los individuos en la suya. Por otro lado podemos ver lo útil que puede
ser introducir una observación conocidad en el gráfico (punto rojo) para comprobar si estamos
realizando una correcta interpretación. Finalmente, hacer el gráfico “a mano”, aunque nos ha
servido para ver cómo se generan, también no ha enseñado que utilizar las funciones existentes
para ello es mucho mejor y menos trabajoso.
Se podría decir que el primer eje es una medida de tamaño y el segundo una medida de forma. Los
individuos a la izquierda del eje son más pequeños y a la derecha más grandes. Mientras que los de
la parte superior son más anchos en general y en la parte inferior más estilizados o “espigados”.
Si cada variable contribuyese en igual proporción, puesto que tenemos 6 variables, cada una
contribuiría 1/6, o lo que es lo mismo un 16.67% . Podemos representar la contribución de las
variables a los factores mediante gráficos de barras.
Visualización de 3 componentes
Los gráficos en 3 dimensiones nos permite tener una visión un poco más clara y realista de la
distribución de los individuos y las variables en este espacio multidimensional. Hay que tener en
cuenta que con los datos de este ejemplo, teníamos alrededor del 90 % de la información
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 17/27
7/2/2021 Análisis multivariante. Ordenación I
representada en 3 ejes, lo que quiere decir que un gráfico 3D prácticamente no deja incógnitas
sobre la distribución de observaciones y variables. Sin embargo, si la varianza explicada fuese
bastante inferior, aún en un espacio tridimensional veríamos que los vectores no llegan a tocar la
superficie de la esfera. Necesitaríamos un espacio n–dimensional para poder verlo.
# individuos en 3D
plot3d( biom_pca$ind$coord[, 1:3 ], col = biom$Sexo )
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 18/27
7/2/2021 Análisis multivariante. Ordenación I
# Variables en 3D
matrix3d <- matrix( c( 0.99924529, 0.01935360, -0.03367962, 0,
-0.01976939, 0.99973202, -0.01205689, 0,
0.03343736, 0.01271362, 0.99936002, 0,
0, 0, 0, 1),
nrow = 4, ncol = 4, byrow = TRUE)
Resumiendo
A pesar de que parezca demasiado complejo y demasiada información, realmente es muy sencillo
aplicar componentes principales en R. En apenas cuatro o cinco líneas de código estaría resuelto
todo el análisis con gráficos incluidos.
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 19/27
7/2/2021 Análisis multivariante. Ordenación I
Podría entenderse como una técnica complementaria al PCA, pues mientras el PCA explora las
relaciones entre las variables a partir de una matriz de covarianzas o correlaciones, el MDS explora
la estructura o configuración de los individuos a partir de una matriz de distancias o proximidades.
#Cargar datos
data( eurodist )
dst <- eurodist #Directamente objeto dist no matrix ni data.frame
str( dst )
El objeto generado es de tipo dist, puede ser visualizado como una matriz de datos, convirtiéndolo
como tal mediante la función as.matrix , por ejemplo:
# Escalado métrico
dstMDS <- cmdscale( dst, k = 3, eig = TRUE )
summary( dstMDS )
str( dstMDS )
List of 5
$ points: num [1:21, 1:3] 2290.3 -825.4 59.2 -82.8 -352.5 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:21] "Athens" "Barcelona" "Brussels" "Calais" ...
.. ..$ : NULL
$ eig : num [1:21] 19538377 11856555 1528844 1118742 789347 ...
$ x : NULL
$ ac : num 0
$ GOF : num [1:2] 0.79 0.91
dstMDS$eig
#Variabilidad acumulada
cumsum( abs( dstMDS$eig ) ) / sum( abs( dstMDS$eig ) )
#Plot mapa
x <- dstMDS$points[,1]
y <- dstMDS$points[,2]
plot( x, y, type = "n" )
text( x, y, labels = rownames( dstMDS$points ), cex= .75 )
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 21/27
7/2/2021 Análisis multivariante. Ordenación I
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 22/27
7/2/2021 Análisis multivariante. Ordenación I
#3d de eurodist
dstMDS <- cmdscale( dst, k = 3, eig = TRUE )
x <- dstMDS$points[,1]
y <- dstMDS$points[,2]
z <- dstMDS$points[,3]
plot3d( x, y, z, col = c(1:50), type = "n", size = 2, box = FALSE, axes = FALSE
text3d( x, y, z, texts = rownames( dstMDS$points ), cex= .75 )
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 23/27
7/2/2021 Análisis multivariante. Ordenación I
En este ejemplo, la tabla de datos está formada por distintos modelos de coches (observaciones)
de los que tenemos algunas características (variables). Queremos ver la relación existente entre los
modelos, cómo de cerca o lejos están en base a sus características.
En este caso, no disponemos de un objeto distancia, sino una matriz de datos en base a la cual se
calcularán las distancias.
data( "mtcars" )
head( mtcars )
Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sp
Mazda RX4 0.0000000 0.6153251 54.90861 98.11252
Mazda RX4 Wag 0.6153251 0.0000000 54.89152 98.09589
Datsun 710 54.9086059 54.8915169 0.00000 150.99352
Hornet 4 Drive 98.1125212 98.0958939 150.99352 0.00000
Hornet Sportabout 210.3374396 210.3358546 265.08316 121.02976
str( carMDS )
List of 5
$ points: num [1:32, 1:3] -79.6 -79.6 -133.89 8.52 128.69 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive"
.. ..$ : NULL
$ eig : num [1:32] 577879.5 45113.6 292.4 52.9 25.5 ...
$ x : NULL
$ ac : num 0
$ GOF : num [1:2] 1 1
#variabilidad acumulada
cumsum( abs( carMDS$eig ) ) / sum( abs( carMDS$eig ) )
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 24/27
7/2/2021 Análisis multivariante. Ordenación I
# representacion 2D
plot( carMDS$points[ , 1 ], carMDS$points[ , 2 ], type = "n", axes = FALSE, xla
text( carMDS$points[ , 1 ], carMDS$points[ , 2 ], rownames( carMDS$points ), ce
# En 3d
x <- carMDS$points[ , 1 ]
y <- carMDS$points[ , 2 ]
z <- carMDS$points[ , 3 ]
plot3d( x, y, z , type = "n", size = 1, box = FALSE, axes = FALSE, col = c( 1:2
text3d( x, y, z, texts = rownames( carMDS$points ), cex=0.7 )
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 25/27
7/2/2021 Análisis multivariante. Ordenación I
Manos a la obra
Es hora de hacer un ejemplito sencillo para repasar y hacernos pensar un poco, asi que… manos a
la obra (http://ares.inf.um.es:3838/ares/mamutCola/modulo04/).
Referencias
Este tutorial, tiene algo más de matemática que nuestro curso, aún así es bastante sencillo y
con buenos ejemplos de aplicaciones (visitar (https://rpubs.com/Joaquin_AR/287787))
Un librito muy apañado sobre análisis multivariate general con R, en su capítulo 1 trata el
análisis de componentes principales (visitar (https://www.crcpress.com/Exploratory-
Multivariate-Analysis-by-Example-Using-R-Second-Edition/Husson-Le-
Pages/p/book/9781138196346?tab=rev)).
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 26/27
7/2/2021 Análisis multivariante. Ordenación I
ares.inf.um.es/00Rteam/pub/mamutCola/modulo4.html 27/27