Análisis de Componentes Principales (ACP)
Principal Component Analysis (PCA): método estadístico que permite simplificar la complejidad de espacios muestrales con muchas dimensiones a la vez que conserva su información.
Dada una muestra de \(n\) individuos cada uno con \(p\) variables \((X_1, X_2, …, X_p)\), es decir, el espacio muestral tiene \(p\) dimensiones.
El PCA permite encontrar un número de factores subyacentes \((z<p)\) que explican aproximadamente lo mismo que las \(p\) variables originales.
Cada \(z\) recibe el nombre de componente principal.
Una de las aplicaciones de PCA es la reducción de dimensionalidad (variables), perdiendo la menor cantidad de información (varianza) posible:
El PCA sirve como herramienta para la visualización de datos
El análisis en componentes principales (ACP) se utiliza para describir tablas que tienen en las filas las unidades estadísticas, generalmente denominadas, “individuos”, y en las columnas las variables de tipo continuo que se han medido sobre los individuos.
Los objetivos del ACP son:
- Comparar los individuos entre si. Las gráficas que se obtienen permiten observar la forma de la “nube de individuos”, lo que a su vez permite detectar patrones en ellos.
- Describir las relaciones entre las variables.
- Reducir la dimensión de la representación. A mayor relación entre las variables mayor es la capacidad de síntesis del ACP y unos pocos ejes factoriales podrán resumir las variables originales.
Eingenvectores y eigenvalores
Los eigenvectores y eigenvalores son números y vectores asociados a matrices cuadradas. Dada una matriz \(A\) de \(n\times n\), su eigenvector \(v\) de \(n\times\) tal que
\[Av =\lambda v\]
- \(\lambda\) es el eigenvalor, un valor escalar real asociado con el eigenvector.
Ejemplo:
\[\begin{pmatrix} 2 & 3 \\ 2 & 1 \end{pmatrix} \begin{pmatrix} 3 \\ 2 \end{pmatrix} = \begin{pmatrix} 12 \\ 8 \end{pmatrix} = 4 \begin{pmatrix} 3 \\ 2 \end{pmatrix}\]
en R los puede calcular con la funcion eigen
Ejercicio:
- Defina la matriz y guardela con el nombre \(B\)
- Calcular los eingevalores e ingevectores
Propiedades de los eigenvectores
Solo las matrices cuadradas tienen eigenvectores, pero no todas las matrices cuadradas los tienen.
Dada una matriz \(n\times n\) con eigenvectores, el número existente de ellos es \(n\).
Todos los eigenvectores de una matriz son perpendiculares. Esto significa que podemos expresar los datos respecto a estos eigenvectores.
Un eigenvalor > 1 indica que la componente principal explica más varianza de lo que lo hace una de las variables originales, estando los datos estandarizados.
ESTANDARIZACIÓN DE LAS VARIABLES
El cálculo de los componentes principales depende de las unidades de medida empleadas en las variables.
Es importante, antes de aplicar el PCA, estandarizar las variables para que tengan media 0 y desviación estándar 1
\[\frac{x_i−media(x)}{sd(x)}\]
Interpretación geométrica de las componentes principales
Una forma intuitiva de entender el proceso de PCA consiste en interpretar las componentes principales desde un punto de vista geométrico.
Cálculo de las componentes principales
Cada componente principal (\(Z_i\)) se obtiene por combinación lineal de las variables originales.
La primera componente principal de un grupo de variables \((X_1, X_2, …, X_p)\) es la combinación lineal normalizada de dichas variables que tiene mayor varianza:
\[Z_1=\phi_{11} X_1 + \phi_{21}X_2+ ... + \phi_{p1}X_p\] con la condición
\[\displaystyle\sum_{j=1}^p \phi^{2}_{j1}= 1\] En general \[ Z_{m}=\sum_{j=1}^{p} \phi_{j m} X_{j} \]
\(\phi_{1m},\phi_{2m},...,\phi_{pm}\) son las cargas o
loadings
de los componentes principalesLa primera componente principal (\(Z_1\)) es aquella cuya dirección refleja o contiene la mayor variabilidad en los datos.
Este vector define la línea lo más próxima posible a los datos y que minimiza la suma de las distancias perpendiculares entre cada dato y la línea representada por la componente (usando como medida de cercanía el promedio de la distancia euclídea al cuadrado):
\[ z_{i1}=\phi_{11} x_{i 1}+\phi_{21} x_{i 2}+\ldots+\phi_{p 1} x_{i p} \] donde \(\phi_{11}\) corresponde al primer loading de la primera componente principal.
En otras palabras, el vector de loadings de la primera componente principal resuelve el problema de optimización
\[ \underset{\phi_{11}, \ldots, \phi_{p 1}}{\operatorname{maximize}}\left\{\frac{1}{n} \sum_{i=1}^{n}\left(\sum_{j=1}^{p} \phi_{j 1} x_{i j}\right)^{2}\right\} \] \[ \text { sujeto a } \sum_{j=1}^{p} \phi_{j 1}^{2}=1 \] - La segunda componente principal (\(Z_2\)) será una combinación lineal de las variables, que recoja la segunda dirección con mayor varianza de los datos, pero que no esté correlacionada con \(Z_1\). Esta condición es equivalente a decir que la dirección de \(Z_2\) (vector \(\phi_{2}\)) ha de ser perpendicular u ortogonal respecto a \(Z_1\) (vector \(\phi_1\)).
Proporción de la varianza explicada
¿Cuánta información presente en el set de datos original se pierde al proyectar las observaciones en un espacio de menor dimensión?
¿Cuanta información es capaz de capturar cada una de las componentes principales obtenidas?
Asumiendo que las variables se han normalizado para tener media cero, la varianza total presente en el set de datos se define como
\[\displaystyle\sum_{j=1}^p Var(X_j) = \displaystyle\sum_{j=1}^p \frac{1}{n} \displaystyle\sum_{i=1}^n x^{2}_{ij} \]
la varianza explicada por la componente \(m\) es:
\[\frac{1}{n} \sum_{i=1}^n z^{2}_{im} = \frac{1}{n} \sum_{i=1}^n \left( \sum_{j=1}^p \phi_{jm}x_{ij} \right)^2\] La proporción de varianza explicada por la componente \(m\) es:
\[\frac{\sum_{i=1}^n \left( \sum_{j=1}^p \phi_{jm}x_{ij} \right)^2} {\sum_{j=1}^p \sum_{i=1}^n x^{2}_{ij}}\]
Algunos comandos en R
library(stats)
prcomp()
-> Forma rápida de implementar PCA sobre una matriz de datos.princomp()
library(FactoMineR)
PCA()
-> PCA con resultados más detallados.- Los valores ausentes se reemplazan por la media de cada columna.
- Pueden incluirse variables categóricas suplementarias.
- Estandariza automáticamente los datos.
library(factoextra)
get_pca()
-> Extrae la información sobre las observaciones y variables de un análisis PCA.get_pca_var()
-> Extrae la información sobre las variables.get_pca_ind()
-> Extrae la información sobre las observaciones.
Visualizaciones:
library(FactoMineR)
fviz_pca_ind()
-> Representación de observaciones sobre componentes principales.fviz_pca_var()
-> Representación de variables sobre componentes principales.fviz_screeplot()
-> Representación (gráfico barras) de eigenvalores.fviz_contrib()
-> Representa la contribución de filas/columnas de los resultados de un pca.
Matrix | Alien | Serenity | Casablanca | Amelie |
---|---|---|---|---|
1 | 1 | 1 | 0 | 0 |
3 | 3 | 3 | 0 | 0 |
4 | 4 | 4 | 0 | 0 |
5 | 5 | 5 | 0 | 0 |
0 | 2 | 0 | 4 | 4 |
0 | 0 | 0 | 5 | 5 |
0 | 1 | 0 | 2 | 2 |
Realice análisis de componentes de componentes principales para la base de películas y usuarios usando los paquetes “FACTO”
- Ejercicio:
Defina una matriz llamela \(A\), los nombres de las columnas “Matrix”, “Alien”, “Serenity”,“Casablanca”, “Amelie” nombres de los individuos “Pedro”,“Adriana”, “Teo”, “Andres”, “Manuel”, “Javier”, “Maria”
data=c(1, 1, 1, 0, 0,3, 3, 3, 0, 0,4, 4, 4, 0, 0,5, 5, 5, 0,
0,0, 2, 0, 4, 4,0, 0, 0, 5, 5,0, 1, 0, 2, 2)
A=matrix(data, nrow=7, byrow = T)
peliculas=c("Matrix", "Alien", "Serenity","Casablanca", "Amelie")
individuos=c("Pedro","Adriana", "Teo", "Andres", "Manuel", "Javier", "Maria")
colnames(A)=peliculas
rownames(A)=individuos
A
## Matrix Alien Serenity Casablanca Amelie
## Pedro 1 1 1 0 0
## Adriana 3 3 3 0 0
## Teo 4 4 4 0 0
## Andres 5 5 5 0 0
## Manuel 0 2 0 4 4
## Javier 0 0 0 5 5
## Maria 0 1 0 2 2
- Correlacion entre las variables
## Matrix Alien Serenity Casablanca Amelie
## Matrix 1.0000000 0.9318326 1.0000000 -0.7487835 -0.7487835
## Alien 0.9318326 1.0000000 0.9318326 -0.6525827 -0.6525827
## Serenity 1.0000000 0.9318326 1.0000000 -0.7487835 -0.7487835
## Casablanca -0.7487835 -0.6525827 -0.7487835 1.0000000 1.0000000
## Amelie -0.7487835 -0.6525827 -0.7487835 1.0000000 1.0000000
## Warning: package 'psych' was built under R version 4.3.1
## **Results for the Principal Component Analysis (PCA)**
## The analysis was performed on 7 individuals, described by 5 variables
## *The results are available in the following objects:
##
## 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"
"$eig"
- Representa los autovalores asociados a cada componente principal.
- Los autovalores indican la cantidad de varianza que cada componente principal representa. Cuanto más grande es un autovalor, más varianza del conjunto original de datos es capturada por ese componente.
"$var"
Proporciona un resumen de los resultados relacionados con las variables."$var$coord"
Son las coordenadas de las variables en el espacio de los componentes principales. Estas coordenadas ayudan a interpretar la relación entre las variables y cada componente principal."$var$cor"
Representa las correlaciones entre las variables originales y los componentes principales. Una correlación alta indica que la variable está bien representada por ese componente principal."$var$cos2"
Es el cuadrado del coseno de los ángulos entre las variables y los componentes principales. Muestra la calidad de representación de las variables en cada componente principal. Un valor cercano a 1 indica una buena representación."$var$contrib"
Indica cuánto contribuye cada variable a cada componente principal."$ind"
Proporciona un resumen de los resultados relacionados con las observaciones o individuos."$ind$coord"
Son las coordenadas de los individuos en el espacio de los componentes principales."$ind$cos2"
muestra la calidad de representación de los individuos en cada componente principal."$ind$contrib"
Indica cuánto contribuye cada individuo a cada componente principal."$call"
Estadísticas resumidas del PCA."$call$centre"
Es la media de cada variable. El PCA se realiza comúnmente después de centrar (restar la media) los datos."$call$ecart.type"
Representa la desviación estándar o el error estándar de las variables."$call$row.w"
Son los pesos asociados a cada individuo."$call$col.w"
Son los pesos asociados a cada variable.
## [1] "PCA" "list"
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Matrix 0.9617509 0.2441499 0.12420145 1.035644e-33 0.000000e+00
## Alien 0.9051834 0.3632297 -0.22069699 -4.065142e-49 6.137228e-82
## Serenity 0.9617509 0.2441499 0.12420145 -1.035644e-33 -5.759958e-82
## Casablanca -0.8946615 0.4462091 0.02186887 1.016285e-49 -2.539979e-66
## Amelie -0.8946615 0.4462091 0.02186887 1.016285e-49 2.539979e-66
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 4.270125e+00 8.540250e+01 85.40250
## Dim.2 6.493593e-01 1.298719e+01 98.38969
## Dim.3 8.051566e-02 1.610313e+00 100.00000
## Dim.4 1.464622e-33 2.929243e-32 100.00000
## Dim.5 3.592073e-66 7.184147e-65 100.00000
## eigenvalue percentage of variance cumulative percentage of variance
## comp 1 4.270125e+00 8.540250e+01 85.40250
## comp 2 6.493593e-01 1.298719e+01 98.38969
## comp 3 8.051566e-02 1.610313e+00 100.00000
## comp 4 1.464622e-33 2.929243e-32 100.00000
## comp 5 3.592073e-66 7.184147e-65 100.00000
- Se puede observar tanto en la tabla como en el anterior gráfico que las componentes \(1\) y 2 son las más significativas ya que capturan el 98% de las varianzas de las variables.
fviz_pca_var(peliculas_pca,repel = T, colvar="cos2", col.var = "contrib", alpha.var = "contrib", gradient.cols=c("#FF0000","#FFFF00","#00FF00"))
Analisis
Podemos visualizar que las variables están bien representadas sobre la dimensión \(1\), ya que su magnitud es considerablemente grande.
Se visualiza que las películas Alien, Matrix y Serenity son películas que tienen bastante ciencia ficción y están bien representadas sobre la dimensión \(1\) (Ciencia ficción) mientras que Amelie y Casablanca carecen de esta pues están en el sentido opuesto y las usaremos para representar la dimensión 2 (Películas de romance).
Por otro lado podemos observar que todas las películas tienen de alguna forma algo de romance.
Las cantidades numéricas que corroboran estas afirmaciones se pueden ver en las siguientes gráficos y tablas donde se muestran las coordenadas y las contribuciones.
## corrplot 0.92 loaded
## Principal Component Analysis Results for variables
## ===================================================
## Name Description
## 1 "$coord" "Coordinates for the variables"
## 2 "$cor" "Correlations between variables and dimensions"
## 3 "$cos2" "Cos2 for the variables"
## 4 "$contrib" "contributions of the variables"
## Dim.1 Dim.2 Dim.3
## Matrix 0.9617509 0.2441499 0.12420145
## Alien 0.9051834 0.3632297 -0.22069699
## Serenity 0.9617509 0.2441499 0.12420145
## Casablanca -0.8946615 0.4462091 0.02186887
## Amelie -0.8946615 0.4462091 0.02186887
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Matrix 21.66131 9.179687 19.1590072 7.323108e-32 0.000000e+00
## Alien 19.18813 20.317849 60.4940241 1.128303e-62 1.048575e-95
## Serenity 21.66131 9.179687 19.1590072 7.323108e-32 9.236201e-96
## Casablanca 18.74463 30.661389 0.5939807 7.051897e-64 1.796037e-64
## Amelie 18.74463 30.661389 0.5939807 7.051897e-64 1.796037e-64
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Matrix 0.9249648 0.05960915 0.0154260011 1.072558e-66 0.000000e+00
## Alien 0.8193570 0.13193585 0.0487071628 1.652538e-97 3.766557e-163
## Serenity 0.9249648 0.05960915 0.0154260011 1.072558e-66 3.317711e-163
## Casablanca 0.8004192 0.19910259 0.0004782475 1.032836e-98 6.451495e-132
## Amelie 0.8004192 0.19910259 0.0004782475 1.032836e-98 6.451495e-132
Contribuciónn de cada variable a las componentes principales (cada película) en cada concepto(en cada componente principal)
Prueba que cada variable aporta un porcentaje en cada componente. La suma es $100
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## 1.000000e+02 1.000000e+02 1.000000e+02 1.464622e-31 3.592073e-64
gráfica para mirar la contibucion de las variables al pca
A partir del anterior gráfico se puede decir
- Andres y Teo les gusta las pel?culas de ciencia ficción.
- Javier y Manuel les gusta las películas que contienen poca ciencia ficción porque están al lado opuesto en la dimensión \(1\).
- Pedro es neutral respecto a las películas de ciencia ficción y no es afínn con las películas de romance.
## Warning: package 'GGally' was built under R version 4.3.1
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
PCA base Iris
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Elegimos las variables cuantitativas
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 2.91849782 72.9624454 72.96245
## Dim.2 0.91403047 22.8507618 95.81321
## Dim.3 0.14675688 3.6689219 99.48213
## Dim.4 0.02071484 0.5178709 100.00000
- Podemos observar que los componentes \(1\) y \(2\) son las más significativas. Capturan casi el 96% de las varianzas de las variables.
fviz_pca_var(Iris_pca,repel = T, colvar="cos2", col.var = "contrib", alpha.var = "contrib", gradient.cols=c("#FF0000","#FFFF00","#00FF00"))
Interpretación
Podemos notar que el ancho y la longitud de los pétalos están altamente correlacionadas y su variabilidad a través de las tres especies Iris se explica principalmente por el componente \(1\)(Pétalo), que también explica una gran parte de la variabilidad en la longitud del sépalo.
La componente principal 2 explica principalmente el ancho del sépalo.
- La anterior gráfica corrobora que la dimensión explica muy bien las variables Longitud del petalo, ancho del petalo y longitud del sepalo, mientras que la dimension 2 explica el ancho del sepalo.
Analisis de variables cualitativas
no se toman en cuanta para pca es para un análisis posterior
## Dim.1 Dim.2 Dim.3 Dim.4
## Sepal.Length 0.8901688 0.36082989 -0.27565767 -0.03760602
## Sepal.Width -0.4601427 0.88271627 0.09361987 0.01777631
## Petal.Length 0.9915552 0.02341519 0.05444699 0.11534978
## Petal.Width 0.9649790 0.06399985 0.24298265 -0.07535950
## $coord
## Dim.1 Dim.2 Dim.3 Dim.4
## setosa -2.224753 0.2889275 -0.04283910 -0.01834076
## versicolor 0.496448 -0.5501705 -0.09612951 0.03034009
## virginica 1.728305 0.2612430 0.13896861 -0.01199933
##
## $cos2
## Dim.1 Dim.2 Dim.3 Dim.4
## setosa 0.9829895 0.01657917 0.0003644734 6.680665e-05
## versicolor 0.4406515 0.54118069 0.0165219448 1.645816e-03
## virginica 0.9714759 0.02219630 0.0062809398 4.682797e-05
##
## $v.test
## Dim.1 Dim.2 Dim.3 Dim.4
## setosa -11.240362 2.608475 -0.9652043 -1.0999036
## versicolor 2.508258 -4.967011 -2.1658862 1.8195091
## virginica 8.732103 2.358536 3.1310905 -0.7196055
##
## $dist
## setosa versicolor virginica
## 2.2439201 0.7478701 1.7534945
##
## $eta2
## Dim.1 Dim.2 Dim.3 Dim.4
## Species 0.9346162 0.1657182 0.06902197 0.02254243
Visualizar todas las variables en un solo gráfico
como mostrar las variables cualitativas, en este caso las competencias
- En los dos anteriores gráficos observamos que hay una gran diferencia entre las flores iris de la especie setosa y las de las especies versicolor y virginica esta diferencia se da en la dimensión \(1\) que representa el ancho y la longitud del petalo y la longitud del sepalo.
A continuación se puede visualizar las correlaciones graficamente de cada una de las variables.
pairs(iris[1:4], main = "Anderson's Iris Data -- 3 species",
pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])