Cortesía de Pexels

Componentes Principales con Python

Anavelyz Perez
qu4nt
Published in
9 min readSep 24, 2019

--

Comenzaremos con una breve introducción sobre los componentes principales, esta es una de las técnicas multivariantes de tipo matemático para la cual no es necesario asumir distribución probabilística alguna, tiene como objetivo la estructuración de un conjunto de datos multivariado mediante la reducción del número de variables. Se busca eliminar la redundancia de información. Esta técnica se puede realizar a partir de la matriz de covarianzas (Σ para el caso poblacional o 𝐒 para el caso muestral) o por la matriz de correlación (𝐑). Los componentes resultantes se consideran como variables emergentes, debido a que muchos de ellos reúnen la información de al menos una de las variables estudiadas.

En pocas palabras, los componentes principales son una herramienta en aquellos casos donde tenemos n variables cuantitativas, de las cuales la mayoría está relacionada entre sí y comparten información igual o similar. Es decir, los componentes principales exhiben una alta correlación de unas variables con otras. A partir de esto se toman las variables y se mezclan mediante combinaciones lineales reduciéndose a 𝑘<𝑝 variables que resumen la información para facilitar la interpretación.

La técnica de componentes principales es debida a Hotelling (1933), aunque sus orígenes se encuentran en los ajustes ortogonales por mínimos cuadrados introducidos por K. Pearson (1901). Su utilidad es doble:

1. Permite representar óptimamente en un espacio de dimensión pequeña, observaciones de un espacio general p-dimensional. En este sentido componentes principales es el primer paso para identificar posibles variables “latentes” o no observadas, que están generando la variabilidad de los datos.

2. Permite transformar las variables originales, en general correladas, en nuevas variables incorreladas, facilitando la interpretación de los datos.

Análisis De Datos Multivariantes. Daniel Peña. 2002. Pág. 137

Cortesía de Pexels

Procedimiento para hallar los componentes principales:

Se tiene que los componentes principales son combinaciones lineales, llamaremos 𝑍1 al primer componente, 𝑍2 al segundo y así sucesivamente hasta 𝑍𝑘 que es el k-ésimo componente (𝑘=1, 2, 3, …, 𝑝) . Cada uno de ellos tiene la siguiente estructura:

Para el caso del primer componente, se escogen 𝑎11, 𝑎12, …, 𝑎1𝑝 de tal forma que maximicen la razón de la varianza de 𝑍1 a la variación total; con la restricción:

El segundo componente principal 𝑍2 es una combinación lineal ponderada de las variables observadas, la cual no está correlacionada con la primera componente principal y reúne la máxima variabilidad restante de la variación total contenida en la primera componente principal 𝑍1. De manera general, la k-ésima componente es una combinación lineal de las variables observadas 𝑋𝑗, para 𝑗 = 1, …, 𝑝

que tiene la varianza más grande entre todas las que le siguen. De otra manera, los 𝑍𝑘 sintetizan en forma decreciente la varianza del conjunto original de los datos.

Para calcular los componentes a partir de un camino matricial debemos recordar algunas cosas como lo siguiente: Σ es la matriz de varianzas y covarianzas asociada a nuestra matriz de datos original (𝐗), se calcula como

Por definición Σ es una matriz real simétrica con raíces diferentes de cero, entonces esta se puede escribir, de acuerdo con la descomposición espectral, como:

donde Λ es una matriz diagonal cuyos elementos son λ1,…,λ𝑝 y Γ es una matriz ortogonal cuya j−ésima columna es el j−ésimo vector propio Γ𝑗 asociado a λj . Los elementos de Γ son los λij , los cuales dan cuenta de la contribución de la i−ésima variable en la j−ésima componente lineal. El vector de componentes principales, que resulta de la transformación lineal Γ aplicada sobre el vector X, es 𝑍´=(𝑍1, 𝑍2, …, 𝑍𝑝) se escribe así:

La misma transformación aplicada sobre los datos contenidos en la matriz de datos X, produce

que corresponde a la matriz que representa a los mismos individuos representados en la matriz 𝕏, pero ahora referidos a los “nuevos” ejes principales. La matriz de covarianzas de X esta dada por

Como Λ es una matriz diagonal, las componentes principales son incorrelacionadas y la varianza de la k−ésima componente principal es su respectivo valor propio:

La varianza total de las variables originales, es igual a la suma de las varianzas en cada uno de los componentes principales. En resumen, la transformación lineal que reúne la máxima variabilidad contenida en los datos corresponde a la generada por el valor propio más grande de los 𝜆𝑖. Es costumbre denotar al valor propio más grande como 𝜆1, de tal manera que los valores propios 𝜆1≥𝜆2≥···≥𝜆𝑝, generan las componentes principales.

Habitualmente, se calculan los componentes sobre variables originales estandarizadas, es decir, variables con media 0 y varianza 1. Esto equivale a tomar los componentes principales, no de la matriz de covarianzas sino de la matriz de correlaciones (en las variables estandarizadas coinciden las covarianzas y las correlaciones). Así, los componentes son autovectores de la matriz de correlaciones y son distintos de los de la matriz de covarianzas.

Si se actúa de esta forma, se da igual importancia a todas las variables originales. En la matriz de correlaciones todos los elementos de la diagonal son iguales a 1. Si las variables originales están tipificadas, esto implica que su matriz de covarianzas es igual a la de correlaciones, con lo que la variabilidad total (la traza) es igual al número total de variables que hay en la muestra.

La matriz de correlación se puede obtener a partir de

Cortesía de Pexels

¿Cómo podemos aplicar la técnica de Componenetes Principales en Python?

Ya vimos que para aplicar la técnica de Componenetes Principales necesitamos la matriz de covarianzas o la matriz de correlación asociada a los datos. A su vez, se requiere una descomposición espectral de esa matriz con la finalidad de obtener aquellos valores que maximicen la varianza, estos están expuestos en los autovalores cuyos autovectores asociados contienen la información de la nueva variable emergente. En líneas anteriores aparece la fórmula para calcular la matriz de covarianzas, ahora veamos esto en Python con un ejemplo:

Debemos importar o crear la data. En este caso utilizaremos numpy con el paquete random de manera tal que se generará un arreglo de números aleatorios con 40 filas y 5 columnas.

Ahora debemos:

  1. Estimar la matriz de covarianzas Σ es decir, calcular la matriz S.
  2. Obtener los valores propios de la matriz S; éstos corresponden a la varianza de cada componente principal.
  3. Verificar que:

luego hallar la proporción de variabilidad que cada uno de los componentes explica.

4. Los valores más altos obtenidos en 3. suministran un indicio del número de componentes relevantes. Determinar cuántos componentes sería óptimo retener.

5. Calcular el grado de asociación entre la variable (Xi) y la componente principal respectiva(Yk o Zk).

7. Interpretar los “nuevos” ejes.

Entonces:

  1. Para estimar la matriz de covarianzas comencemos recordando que:

Por lo general la matriz anterior es desconocida, por ello se pide su estimación, es decir calcularemos 𝐒, la matriz de covarianzas muestral, su ecuación difiere de la anterior porque ésta está corregida por 𝑛−1.

En Python tenemos varias opciones para calcular la matriz de covarianzas muestral, veamos dos.

a. Hallando y operando los elementos de la fórmula.

  • 𝑛 es el número de observaciones (en nuestro caso debería ser 40), se puede obtener con la función shapeaplicada sobre la matriz X.

shape devuelve una tupla con el número de filas y el número de columnas.

  • La transpuesta de una matriz se obtiene con X.T
  • La matriz identidad 𝐼n de tamaño 𝑛 se obtiene con np.eye(n)
  • 11′ es una matriz de unos de tamaño n x n, se calcula con np.ones((n,n)) .
  • La multiplicación de matrices en Python se puede aplicar a partir de @.

Ahora la matriz de covarianzas, se obtiene por:

b. Utilizando la función cov de Numpy con la matriz de datos transpuesta dado que la función asume que cada observación está en las columnas, entonces

2. Para obtener los valores propios de la matriz utilizaremos el módulo linalg de Numpy específicamente la función eigh ya que esta retorna los autovalores y los autovectores de una matriz simétrica (los autovalores se muestran en una lista ascendente).

La matriz de covarianzas es una matriz simétrica

3. Inicialmente verifiquemos que la traza de la matriz S (la obtenemos con la función tracede Numpy) es igual a la suma de los autovalores, que calculamos en el paso anterior.

La proporción de variabilidad explicada por cada componente la podemos calcular con:

en porcentaje esto sería:

4. Para este paso debemos tener en cuenta que los autovectores que obtuvimos están ordenados de menor a mayor. Esto indica que el primer componente esta asociado al último autovector de la lista, el segundo al penúltimo y así sucesivamente. Podemos corregir esto a partir de

Veamos un gráfico de sedimentación, el cual nos permitirá representar el porcentaje de variación explicado por cada componente o factor en las ordenadas y las componentes en orden decreciente en la abscisas con la finalidad de escoger los factores que retengan más variación.

En este caso vemos que el gráfico presenta un punto de declive más pronunciado en el tercer componente lo cual se debe a que estos retienen una cantidad importante de la variabilidad, aproximadamente el 74,13% (31.23+25.32+17.60). Por ello vamos a retener estos componentes, ahora debemos calcular su correlación con las variables originales.

5. Como se retienen los tres primeros componentes almacenemos tanto los autovalores como los autovectores en dos variables nuevas para poder operar fácilmente sobre ellos.

Ahora calculemos la correlación entre la variable 1 y el primer componente utilizando la fórmula dada anteriormente

Mediante un bucle y utilizando la función tabulate veamos las correlaciones de los tres componentes con las cinco variables originales:

Las correlaciones se interpretan como la asociación lineal entre cada componente y la variable en cuestión, estás nos dan un indicio de los nombres que pueden adquirir los componentes. En este caso:

  • El componente 1 representa el promedio de las variables 1, 3 y 5 que se puede interpretar como una tasa de decrecimiento.
  • El componente 2 se puede considerar como el contaste de las primeras cuatro variables con respecto a la variable 5.
  • El componente 3 al tener correlaciones positivas y negativas moderadas se puede considerar como tasa de crecimiento de las variables 4 y 5 condicionada por la variable 3.

Referencias Bibliográficas:

Peña, Daniel (2002). Análisis De Datos Multivariantes. España: McGrawHill
Díaz, Luis y Mario Morales (2012). Análisis estadístico de datos multivariados. Bogotá: Universidad Nacional de Colombia.

--

--