Pensando en multivariante: primeros pasos
Curso 012: Introducción al análisis de datos multivariantes
¿Qué vamos a ver en este curso?
- Análisis multivariante: técnicas de ordenación
- Análisis multivariante: técnicas de clasificación / aprendizaje no supervisado
Introducción al análisis multivariante
Reflexiones previas
Antes de sumergirnos en el análisis multivariante con R y ver algunas de las técnicas más habituales, su fundamento e implementación, sería conveniente hacernos algunas preguntas para situarnos y sacar el máximo partido posible a nuestro trabajo.
Lo deseable sería hacernos estas preguntas antes de recopilar los datos e incluso antes de diseñar el experimento. Saber qué estamos buscando y dónde queremos llegar, es fundamental para entender qué tipo de datos recopilar y qué tipo de técnica estadística emplear.
¿Dónde estamos?
Si por desgracia ya tenemos los datos antes de habernos hecho estas preguntas, tenemos que ver en qué punto estamos. Es decir, de qué clase de información disponemos. ¿Son los datos cuantitativos, cualitativos, mixtos?, ¿son medidas directas o nos servirán para inferir algo de naturales más abstracta?. Estas preguntas nos van a permitir saber de dónde partimos y la técnica o técnicas estadísticas que podremos aplicar.
¿Dónde vamos?
Qué queremos obtener de los datos. Queremos una simple descripción de las variables, queremos estudiar las relaciones entre las distintas variables o bien las utilizaremos como predictores elaborando con ellas modelos predictivos más complejos. Igual que en el caso anterior, esto determinará el tipo o tipos de análisis que realizaremos con nuestros datos.
¿Cómo llegaremos?
Esta pregunta esta condicionada por el tipo de datos de que disponemos y nuestro objetivo, por ello es la última pregunta que deberíamos hacernos y que nos servirá definitivamente para tomar conciencia del análisis a realizar.
Introducción
¿Qué podemos hacer cuando tenemos un conjunto de observaciones de las que hemos tomado una serie de medidas?.
- Podríamos ver si existe correlación entre las variables que nos permita, de alguna manera, agruparlas.
- Probar distintos modelos que expliquen su comportamiento.
- Encargarle a alguien que lo hago por nosotros
- O quizá lo más lógico, intentar hacer los datos más manejables seleccionando menos variables.
Esto último nos llevaría a la siguiente pregunta: ¿qué variables?
Para esto están (entre otras cosas) las técnicas multivariantes. Un grupo de técnicas estadísticas principal aunque no exclusivamente descriptivas cuya misión es reducir las dimensiones de nuestros datos con la menor perdida de información posible, facilitando su representación gráfica e interpretación.
La matriz de datos
\[X = \begin{bmatrix} x_{11} & x_{12} & ... & x_{1p}\\ x_{21} & ... & ... & x_{22}&\\ ... & ... & ... & ...&\\ x_{n1} & x_{n2} &... & x_{np}& \end{bmatrix}\]
Donde la variable \(V_1\)
\[V._1 = [ x_{11}, x_{21}, ..., x_{n1} ]\]
y la observación \(w_1.\)
\[w_1. = [ x_{11}, x_{12}, ..., x_{1p} ]\]
Ejemplo con datos reales
osos <- read.table( "http://www.stat.sc.edu/~habing/courses/data/bears.txt", head = T )
( df <- head( osos[ , c( 1, 3:6 ) ], 6 ) )
Age Head.L Head.W Neck.G Length
1 70 15.0 6.5 28 78.0
2 8 10.0 4.5 10 43.5
3 19 10.0 5.0 15 45.0
4 45 13.0 6.5 21 60.0
5 19 11.0 6.5 20 47.5
6 21 14.5 5.5 20 61.0
El concepto de distancia
En la escuela de filosofía de Atenas, en la antigua Grecia rezaba la inscripción:
Ἀγεωμέτρητος μηδείς εἰσίτω
Que vendría a traducirse como: Aquí no entra nadie que no sepa geometría
Lo que refleja la importancia que le daban en la Grecia clásica a las mátemáticas. Y en definitiva las técnicas multivariantes son una cuestión de geometría, concretamente de distancias entre variables y entre individuos. Aunque aquí el concepto de distancia no sólo se podría referir a la distancia euclídea que todos tenemos en mente
Existen otras muchas medidas de distancias basadas en criterios más geométricos o en criterios más relacionados con la similaridad o disimilaridad entre individuos
Distancias. Otras distancias y disimilaridades
Distancia euclídea entre dos puntos
\[d_{E}(i,j) = \sqrt{ (x_i - x_j)^2 + (y_i - y_j)^2 }\]
Distancia de Manhattan
\[d_{M}(i,j) = \sum_{k=1}^{n}{\left | i_k-j_k \right |}\]
Distancia de Mahalanobis
\[d_{m}(i,j) = \sqrt{ (i - j)^{T}\sum{}^-1(i - j) }\]
Medidas de disimilaridades
Covarianza
\[\mathrm{cov}(x,y) = \frac{\sum_{i=1}^{n} (x_i - \bar{x}) (y_i - \bar{y})}{n}\]
Correlación
\[r_{xy} = \frac{\mathrm{cov}(x,y)}{s_x ~ s_y}\]
Correlación convertido a distancia
\[\mathrm{dist}(x,y) = 1 - \frac{r_{xy} + 1}{2}\]
Índice de Jaccard
\[I_J = \frac{a}{a+b+c}\]
La matriz de covarianzas
Como hemos visto, la covarianza puede ser una medida de similaridad o disimiliaridad entre variables o individuos. Podemos calcular la matriz de varianzas - covarianzas en R de la siguiente manera:
round( var( osos[ , c( 4:8 ) ] ), 2 )
Head.W Neck.G Length Chest.G Weight
Head.W 2.10 6.34 10.49 9.86 125.60
Neck.G 6.34 29.94 50.01 46.11 582.97
Length 10.49 50.01 112.75 86.57 1063.51
Chest.G 9.86 46.11 86.57 84.01 1011.26
Weight 125.60 582.97 1063.51 1011.26 13077.67
( paste( "Varianza total: ", sum( diag( var(osos[,c(4:8) ] ) ) ) ) )
[1] "Varianza total: 13306.4762662338"
La diagonal de la matriz representa la varianza de cada variable, y la suma de la diagonal sería la varianza total contenida en la tabla. Fuera de la diagonal los valores representan la covarianza entre pares de variables y podría entenderse como la información redundante. Si la \(covarianza \neq 0\) existe redundacia.
A mayor covarianza, mayor redundancia, es decir, mayor cantidad de información común aportan esas variables.
Pero puede verse que las variables con valores muy altos en general tienen mayor covarianza con otras variables, que las de valores bajos. Esto no significa necesariamente que sean éstas más similares al resto. Se esta produciendo un sesgo.
Para evitar esto es conveniente normalizar o tipificar los datos.
Normalización
La normalización más común es \(\frac{x_i - \overline{x}}{\sigma}\). Si aplicamos esa normalización ahora las varaibles tendrán media 0 y desviación típica 1. Aplicando la normalización a los datos anteriores tendríamos:
media <- apply( osos[ , 4:8 ], 2, mean )
desv <- apply( osos[ , 4:8 ], 2, sd )
dfN <- t( ( t( osos[,4:8] ) - media ) / desv )
head( round( dfN, 2 ) , 5 )
Head.W Neck.G Length Chest.G Weight
[1,] 0.21 1.36 1.79 1.04 1.34
[2,] -1.17 -1.93 -1.46 -1.25 -1.32
[3,] -0.83 -1.02 -1.31 -1.36 -1.01
[4,] 0.21 0.08 0.10 -0.10 0.01
[5,] 0.21 -0.11 -1.08 -1.25 -0.97
Y calculando las covarianzas sobre los datos tipificados resultaría
round( var( dfN[ , 1:5 ] ), 2 )
Head.W Neck.G Length Chest.G Weight
Head.W 1.00 0.80 0.68 0.74 0.76
Neck.G 0.80 1.00 0.86 0.92 0.93
Length 0.68 0.86 1.00 0.89 0.88
Chest.G 0.74 0.92 0.89 1.00 0.96
Weight 0.76 0.93 0.88 0.96 1.00
Como puede verse, la diagonal (las varianzas) es siempre 1. Siendo la suma varianzas igual al número de variables. Además, podemos ver cómo las covarianzas ahora están todas en el rango -1 a 1 por lo que ninguna variable pesa más que otra por su naturaleza, sino que una mayor covarianza refleja realmente una mayor redundancia entre esas variables.
Matriz de correlaciones
Otra medida de disimilaridad, que hemos visto, es la matriz de correlaciones. Como su propio nombre indica nos dará información del grado de dependencia de una variable con respecto a otra. Es lógico pensar que una variable consigo misma tendrá una correlación máxima (1) y que cuanto más información compartan dos variables mayor será su correlación. Calculando la correlación para los datos del ejemplo sin normalizar
round( cor( osos[ ,c( 4:8 ) ] ), 2 )
Head.W Neck.G Length Chest.G Weight
Head.W 1.00 0.80 0.68 0.74 0.76
Neck.G 0.80 1.00 0.86 0.92 0.93
Length 0.68 0.86 1.00 0.89 0.88
Chest.G 0.74 0.92 0.89 1.00 0.96
Weight 0.76 0.93 0.88 0.96 1.00
Vemos que la matriz de correlaciones de datos sin tipificar es idéntica a la matriz de covarianzas con los datos tipificados. Por lo que ya sabemos que trabajar con correlaciones nos va a ahorrar el paso de la normalización.
Ordenación y clasificación
En función de cómo se aborda el problema multivariante y los objetivos que se desean alcanzar, se pueden clasificar las técnicas multivariantes en técnicas de ordenación y técnicas de clasificación.
En el primer caso, se busca explicar la mayor parte de la variabilidad existente, reduciendo lo máximo posible el número de dimensiones. Esto supone aplicar combinaciones lineales de las variables que implica una rotación de los ejes y la reordenación de las observaciones a lo largo de los nuevos ejes.
Las técnicas de clasificación, agrupamiento, clustering o conglomerados buscan incluir a las observaciones dentro de clases en las que los individuos sean lo más similares posibles en base a las variables que los definen.
Un ejemplo: supongamos que tenemos una serie de plantas a las que les hemos medido longitud y anchura de pétalos y sépalos. Con las técnicas de clasificación generaremos grupos de plantas que sean similares respecto a estas medidas. A los individuos incluidos en el mismo grupo se les asignará la misma etiqueta que les identifica como miembros del grupo. Veremos esto con más detalle en el apartado del curso de clasificación.
Multivariante en R
En R existen muchos paquetes y funciones orientadas al análisis multivariante. Uno de los más completos y conocidos es el paquete FactoMineR y su complemento para gráficos factoextra. En las siguientes tablas proporcionamos una serie de funciones de estos paquetes para el análsis y representación de datos multivariantes.
Funciones | Descripción |
---|---|
PCA |
Análisis de componentes principales |
CA |
Análisis de correspondencias |
MCA |
Análisis de correspondencias múltiples |
FAMD |
Análisis factorial de datos mixtos |
MFA |
Análisis factorial múltiple |
HCPC |
Clustering jerárquico sobre componentes principales |
dimdesc |
Descripción sobre las dimensiones |
Funciones | Descripción |
---|---|
fviz_eig |
Visualizar autovalores |
fviz_pca |
Gráficos para PCA |
fviz_ca |
Gráficos para CA |
fviz_mca |
Gráficos para MCA |
fviz_mfa |
Gráficos para MFA |
fviz_famd |
Gráficos para FAMD |
fviz_hmfa |
Gráficos para HMFA |
fviz_ellipses |
Dibuja elipses alrededor de grupos |
fviz_cos2 |
Visualizar el cos2 |
fviz_contrib |
Visualizar las contribuciones |
fviz_dend |
Visualizar dendrograma |
fviz_cluster |
Visualización de clustering iterativo |
Funciones | Descripción |
---|---|
get_eigenvalue |
Acceder a la dimensión de los autovalores |
get_pca |
Acceder a resultados de PCA |
get_ca |
Acceder a resultados de CA |
get_mca |
Acceder a resultados de MCA |
get_mfa |
Accder a resultados de MFA |
get_famd |
Acceder a resultaods de FAMD |
get_hmfa |
Acceder a resultados de HMFA |
facto_summarize |
Resumen del análisis |