Capítulo 13 Análisis de Componentes Principales

13.1 Introducción

Supongamos que tenemos un conjunto de datos en \(\mathbb{R}^p\) y que queremos visualizarlos. Si \(p\) es muy grande no podremos visulizar todo el conjunto con un solo gráfico, una manera de visualizar los datos es hacer gráficos de dsipersión de dos dimensiones.

Sin embargo la cantidad de gráficos de dos dimensiones que podemos hacer son \(p(1-p)/2\). Lo cual vuelve la tarea compleja conforme el valor de \(p\) aumenta.

Lo que nos gustaría es poder encontrar una representación de los datos con menos dimensiones pero que conserva la mayor cantidad de información posible.

El análisis de componentes principales es una herramienta que nos permitirá lograr eso, enocntrar representaciones en menos dimensiones que conserven la mayor cantidad de varianza.

13.2 Los componentes principales

Los componentes principales de un conjunto de datos en \(\mathbb{R}^p\) son una serie de combinaciones lineales de rango \(q \leq p\) que, colectivamente, explican la mayoría de la varianza original.

Si denotamos las observaciones por \(x_1, x_2, \dots, x_n\), sea \[f(\lambda) = \mu+V_q\lambda\] el modelo lineal de rango \(q\) que las representa; esta ecuación es la representación paramétrica de un hiperplano afín de rango \(q\).

Si resolvemos el problema que nos permita encontrar el plano afín que minimice el error de reconstrucción: \[min_{\mu,\lambda_i,V_q} \sum_{i=1}^N ||x_i-\mu -V_q\lamda_i||^2\] obtenemos

\[\hat{\mu}=\bar{x}\]

\[\hat{\lambda}_i=V_q^T(x_i-\bar{x})\]

Con lo cual debemos encontrar la matriz ortogonal \(V_q\) tal que:

\[min_{V_q}\sum_{i=1}^N||x_i-\bar{x}-V_q V_q^T(x_i-\bar{x})||^2\]

Por facilidad, asumimos que \(\bar{x}=0\). En caso contrario centramos las variables para tener media cero.

Entoncesla matriz \(H_q = V_q V_q^T\) es una matriz de proyección que mapea cada punto \(x_i\) en su reconstrucción \(H_q x_i\) que es la proyección ortogonal de \(x_i\) en el subespacio generado por las columnas de \(V_q\)

La solución puede ser expresada como:

\[\begin{equation} X = UDV^T \tag{13.1} \end{equation}\]

esto es, la descomposicion en valores singulares de \(X\) donde:

  • \(U\) es una matriz ortogonal de \(N\times p\) cuyas columnas llamamos valores singulares izquierdos

  • \(V\) es una matriz ortogonal de \(p\times p\) cuyas columnas llamamos valores singulares derechos

  • \(D\) es una matriz diagonal de \(p \times p\) cuyos elementos cumplen \(d_1\geq d_2\geq \dots \geq d_p\geq 0\) llamados valores singulares

A las columnas de \(UD\) las llamamos componentes principales de \(X\)

El primer componente principal está dado por la combinación lineal normalizada de las columnas de los datos originales cuya varianza es máxima:

\[Z_1 = \phi_{11}X_1+\phi_{21}X_2+ \dots+\phi_{p1}X_p\] N.B. \(\sum_{j=1}^p\phi_{j1}^2=1\)

A los valores \(\phi_{j1}\) los llamamos pesos del primer componente principal. Éstos tienen la restricción de que su suma debe ser igual a uno para evitar que el primer componente tenga varianza arbitraria.

13.3 Interpretación geométrica

Para el primer componente principal, \(\phi_1\) define la dirección en el espacio para la cual los datos presentan mayor variación.

El segundo componente principal es aquella combinación lineal ortogonal al primer componente que tenga máxima varianzay aspi sucesivamente con el resto de componentes.

Los scores de los componentes principales son las proyecciones de los datos en las direcciones descritas por \(\phi_i\)

13.4 Consideraciones

13.4.1 Escalamiento de variables

Los resultados del análisis de componentes principales serán distintos si las variables no se centran (media cero) e incluso serán distintos si éstas se escalan individualmente.

Las diferencias en los resultados están ligadas directamente con la escala en la que estén medidas las diferentes variables del conjunto de datos.

Consideremos por ejemplo los datos USArrests, en este conjunto las variables Murder, Rape y Assault están medidas como ocurrencia por cada 100,000 habitantes y UrbanPop como porcentaje de población, en este sentido, si analizamos las varianzas:

lapply(USArrests, var)
## $Murder
## [1] 18.97047
## 
## $Assault
## [1] 6945.166
## 
## $UrbanPop
## [1] 209.5188
## 
## $Rape
## [1] 87.72916

veremos que Assault tiene la varianza más grande lo cual causará si no escalaramos los datos, que el primer componente tengo un peso muy grande para esta variable.

Para evitar que los componentes principales dependan de la escala o de la elección de algún factor de escala deberemos transformar las variables para que tengan desviación estandar unitaria antes de aplicar el algoritmo de componentes principales.

N.B. Si las variables fueron medidas en la misma escala entonces no es necesario aplicar ninguna transformación.

13.4.2 Varianza explicada por los componentes principales

La varianza total del conjunto de datos está dada por \[\sum_{j=1}^pVar(X_j)=\sum_{j=1}^p\frac{1}{n}\sum_{i=1}^{n}x_{ij}^2\]

La varianza explicada por el m-ésimo componente principal es \[\frac{1}{n}\sum_{i=1}^n(\sum_{j=1}^p\phi_{jm}x_{ij})^2\]

Y la proporción de varianza explicada por el m-ésimo componente es \[\frac{\sum_{i=1}^n(\sum_{j=1}^p\phi_{jm}x_{ij})^2}{\sum_{j=1}^p\sum_{i=1}^nx_{ij}^2}\]

13.4.3 Número de componentes a usar

De manera general, un conjunto de datos n-dimensional tiene \(min(n-1,p)\) componentes principales distintos. Sin embargo, dado que no típicamente usaremos este análisis para reducir la dimensión de los datos no estamos interesados en usarlos todos.

De hecho lo que buscamos es el menor número de componentes que nos permitan capturar una buena cantidad de información.

Para encontrar este número de componentes no existe una respuesta única. Comúnmente usaremos como ayuda el screeplot o gráfica de codo de la varianza del m-ésimo componente principal y escogeremos la cantidad que nos permita capturar ya sea cierta cantidad de varianza e.g. el 70% de ella o bien aquel número de componentes a partir del cual el incremento de varianza por cada componente adicional sea marginal.

13.5 PCA en R

Usaremos datos de números escritos a mano para reducir las dimensiones.

digitos <- read.csv("example_data/train.csv")

El conjunto de datos tiene información sobre 784 pixeles para 1000 números.

un_numero <- matrix(as.matrix(digitos[315,]), ncol = 28, byrow = TRUE)

heatmap(x = un_numero, Colv = NA, Rowv = NA, revC = T, scale = "none", col = grey.colors(1000))

Cada número consta de 784 pixels, la idea es reducir la dimensión de los número para representarlo con una menor cantidad de ellos.

componentes <- prcomp(digitos, center = TRUE, scale. = F, rank. = 100, retx = TRUE)
summary(componentes)
## Importance of first k=100 (out of 784) components:
##                              PC1       PC2       PC3       PC4       PC5
## Standard deviation     561.86766 490.76826 468.37392 440.74081 408.35793
## Proportion of Variance   0.09178   0.07002   0.06377   0.05647   0.04848
## Cumulative Proportion    0.09178   0.16179   0.22557   0.28204   0.33052
##                              PC6       PC7       PC8       PC9      PC10
## Standard deviation     397.26889 330.06467 323.24940 309.72557 280.48302
## Proportion of Variance   0.04588   0.03167   0.03038   0.02789   0.02287
## Cumulative Proportion    0.37640   0.40807   0.43845   0.46633   0.48920
##                             PC11      PC12      PC13      PC14      PC15
## Standard deviation     270.46930 260.12743 244.82230 242.63829 231.37822
## Proportion of Variance   0.02127   0.01967   0.01742   0.01712   0.01556
## Cumulative Proportion    0.51047   0.53014   0.54757   0.56468   0.58024
##                             PC16      PC17      PC18      PC19     PC20
## Standard deviation     226.88223 221.91522 217.69853 205.86651 204.0297
## Proportion of Variance   0.01496   0.01432   0.01378   0.01232   0.0121
## Cumulative Proportion    0.59521   0.60953   0.62330   0.63562   0.6477
##                             PC21      PC22     PC23      PC24      PC25
## Standard deviation     194.69877 191.20772 184.5454 183.85717 176.70210
## Proportion of Variance   0.01102   0.01063   0.0099   0.00983   0.00908
## Cumulative Proportion    0.65875   0.66937   0.6793   0.68910   0.69818
##                             PC26      PC27      PC28      PC29      PC30
## Standard deviation     174.51903 166.72761 165.20845 161.50046 157.06771
## Proportion of Variance   0.00885   0.00808   0.00793   0.00758   0.00717
## Cumulative Proportion    0.70703   0.71511   0.72305   0.73063   0.73780
##                             PC31     PC32      PC33      PC34      PC35
## Standard deviation     154.11878 151.7943 146.20414 141.49294 140.80434
## Proportion of Variance   0.00691   0.0067   0.00621   0.00582   0.00576
## Cumulative Proportion    0.74471   0.7514   0.75762   0.76344   0.76920
##                             PC36      PC37      PC38      PC39      PC40
## Standard deviation     135.72952 135.17497 133.28084 131.86642 126.22832
## Proportion of Variance   0.00536   0.00531   0.00516   0.00506   0.00463
## Cumulative Proportion    0.77456   0.77987   0.78504   0.79009   0.79472
##                             PC41      PC42      PC43      PC44      PC45
## Standard deviation     124.33321 121.16178 120.96106 118.47836 117.96289
## Proportion of Variance   0.00449   0.00427   0.00425   0.00408   0.00405
## Cumulative Proportion    0.79922   0.80349   0.80774   0.81182   0.81586
##                            PC46      PC47      PC48      PC49      PC50
## Standard deviation     114.3650 113.71241 111.81485 110.84387 108.59844
## Proportion of Variance   0.0038   0.00376   0.00363   0.00357   0.00343
## Cumulative Proportion    0.8197   0.82343   0.82706   0.83063   0.83406
##                             PC51      PC52      PC53      PC54      PC55
## Standard deviation     107.67339 103.86519 102.76554 101.25518 100.63854
## Proportion of Variance   0.00337   0.00314   0.00307   0.00298   0.00294
## Cumulative Proportion    0.83743   0.84057   0.84364   0.84662   0.84956
##                            PC56     PC57     PC58     PC59     PC60
## Standard deviation     99.32478 97.46050 96.11925 93.50884 93.43295
## Proportion of Variance  0.00287  0.00276  0.00269  0.00254  0.00254
## Cumulative Proportion   0.85243  0.85519  0.85788  0.86042  0.86296
##                            PC61     PC62    PC63    PC64     PC65     PC66
## Standard deviation     91.23502 89.83818 88.8591 86.9524 85.36302 84.59068
## Proportion of Variance  0.00242  0.00235  0.0023  0.0022  0.00212  0.00208
## Cumulative Proportion   0.86538  0.86772  0.8700  0.8722  0.87434  0.87642
##                            PC67    PC68     PC69     PC70     PC71
## Standard deviation     83.24666 82.9586 81.89783 81.24899 79.89416
## Proportion of Variance  0.00201  0.0020  0.00195  0.00192  0.00186
## Cumulative Proportion   0.87843  0.8804  0.88238  0.88430  0.88616
##                            PC72     PC73     PC74     PC75     PC76
## Standard deviation     79.00510 77.63465 77.28005 75.78120 75.20461
## Proportion of Variance  0.00181  0.00175  0.00174  0.00167  0.00164
## Cumulative Proportion   0.88797  0.88972  0.89146  0.89313  0.89477
##                            PC77     PC78     PC79     PC80     PC81
## Standard deviation     74.74010 72.97750 72.30186 72.02557 70.92370
## Proportion of Variance  0.00162  0.00155  0.00152  0.00151  0.00146
## Cumulative Proportion   0.89640  0.89794  0.89946  0.90097  0.90243
##                            PC82     PC83     PC84     PC85     PC86
## Standard deviation     69.65708 69.57450 68.86347 68.51498 68.32834
## Proportion of Variance  0.00141  0.00141  0.00138  0.00136  0.00136
## Cumulative Proportion   0.90385  0.90525  0.90663  0.90800  0.90935
##                            PC87     PC88     PC89    PC90     PC91
## Standard deviation     67.08805 65.94946 65.13713 64.1382 63.89187
## Proportion of Variance  0.00131  0.00126  0.00123  0.0012  0.00119
## Cumulative Proportion   0.91066  0.91193  0.91316  0.9144  0.91554
##                            PC92     PC93     PC94    PC95     PC96
## Standard deviation     63.15300 62.06389 61.84139 61.5554 60.31362
## Proportion of Variance  0.00116  0.00112  0.00111  0.0011  0.00106
## Cumulative Proportion   0.91670  0.91782  0.91893  0.9200  0.92109
##                            PC97     PC98     PC99   PC100
## Standard deviation     60.23987 59.82256 59.20697 58.5542
## Proportion of Variance  0.00105  0.00104  0.00102  0.0010
## Cumulative Proportion   0.92215  0.92319  0.92421  0.9252
cumulative_prop <- data.frame(pc = 1:100, cumvar = cumsum(componentes$sdev^2/sum(componentes$sdev^2))[1:100])

ggplot(cumulative_prop, aes(pc, cumvar))+
  geom_line()+
  geom_point()+
  labs(x = "Componente", y = "Varianza acumulada")+
  theme_unam()

El gráfico de varianza acumulada nos sugiere que 100 componentes son más que suficientes para representar las 784 dimensiones originales.

nueva_rep <- matrix(componentes$x[315,], nrow = 10, byrow = TRUE)

heatmap(nueva_rep, Colv = NA, Rowv = NA, revC = T, scale = "none", col = grey.colors(2))

Naturalmente, para nosotros, esta representación tiene poco (o ningún) sentido pero es una buena representación de la información original que puede usarse como input para otros modelos e.g. predictivos.