Ejemplo de ACP en R

datos <- read.csv("EAM_2019.csv", sep = ";", dec = ",", header = T)
print(head(datos))
  ï..ciiu personal_mujer personal_hombre gasto_personal gasto_financiero
1    1051             36             140        9352991          3240559
2    1030             40             176        7334998          1468298
3    3290             15             172        6668544          1547666
4    3091             88             373       22088759         35203208
5    3290             18              53        5219070          2861773
6    3290             18              53        5219070          2861773
  costos_gastos_produccion gastos_adm_ventas inversion_AF    ventas
1                  6846304          22920307      4979745 192609248
2                  5941761          12310286      5615593 115741258
3                  6996020           2564695       773444  44580029
4                  4175751         171278876     10501572 162509864
5                 11037978          13691919      6423171  87324374
6                 11037978          13691919      6423171  87324374
datos <- datos[, 2:9]
print(head(datos))
  personal_mujer personal_hombre gasto_personal gasto_financiero
1             36             140        9352991          3240559
2             40             176        7334998          1468298
3             15             172        6668544          1547666
4             88             373       22088759         35203208
5             18              53        5219070          2861773
6             18              53        5219070          2861773
  costos_gastos_produccion gastos_adm_ventas inversion_AF    ventas
1                  6846304          22920307      4979745 192609248
2                  5941761          12310286      5615593 115741258
3                  6996020           2564695       773444  44580029
4                  4175751         171278876     10501572 162509864
5                 11037978          13691919      6423171  87324374
6                 11037978          13691919      6423171  87324374

ACP:

acp <- prcomp(datos, center = T, scale. = T)
print(summary(acp))
Importance of components:
                          PC1    PC2    PC3    PC4     PC5    PC6     PC7
Standard deviation     1.8881 1.2332 1.0115 0.9572 0.74549 0.5514 0.30452
Proportion of Variance 0.4456 0.1901 0.1279 0.1145 0.06947 0.0380 0.01159
Cumulative Proportion  0.4456 0.6357 0.7636 0.8782 0.94763 0.9856 0.99722
                           PC8
Standard deviation     0.14911
Proportion of Variance 0.00278
Cumulative Proportion  1.00000

Se obtienen ocho (\(p = 8\)) Componentes Principales. Cada uno explica un porcentaje de la variación total en el conjunto de datos.

PC1 explica el 44,56% de la varianza total, esto significa que casi la mitad de la información del conjunto de datos que contiene ocho variable puede encapsularse en solo este Componente Principal.

PC2 explica el 19,01% de la varianza total. Entonces, al resumir la información en los primeros dos Componentes Principales se puede explicar el 63,57% de la varianza.

acp
Standard deviations (1, .., p=8):
[1] 1.8881364 1.2332124 1.0114793 0.9572381 0.7454911 0.5513719 0.3045164
[8] 0.1491134

Rotation (n x k) = (8 x 8):
                               PC1         PC2         PC3         PC4
personal_mujer           0.2106928  0.57578375 -0.02214712  0.02361349
personal_hombre          0.3585481  0.46745657 -0.08352398  0.04828165
gasto_personal           0.4548743  0.32937778 -0.04737869 -0.02403973
gasto_financiero         0.1115576  0.01348448  0.74003083 -0.65388863
costos_gastos_produccion 0.4461470 -0.21007377  0.01448462 -0.02746956
gastos_adm_ventas        0.4336228 -0.39544860 -0.11741035 -0.03425391
inversion_AF             0.1238028 -0.05636775  0.64060409  0.75295144
ventas                   0.4530927 -0.37094199 -0.13518240 -0.00996259
                                  PC5         PC6         PC7           PC8
personal_mujer           -0.772202925  0.11726775 -0.09769967  0.0586448480
personal_hombre           0.542176918  0.14380998 -0.57271625 -0.0312928834
gasto_personal            0.253374106 -0.09286009  0.77820633 -0.0578830139
gasto_financiero          0.021041260  0.09724572 -0.03932248  0.0266717602
costos_gastos_produccion -0.136769241 -0.82513357 -0.23007970 -0.0580479890
gastos_adm_ventas        -0.155556129  0.41861887 -0.04299362 -0.6628311912
inversion_AF              0.003127729  0.06144540  0.01999398 -0.0009877992
ventas                   -0.046822464  0.29601441 -0.01070724  0.7408130522

La matriz de rotación muestra las cargas que cada Componente Principal le otorga a cada variable original, por ejemplo, en el PC1, la variable de mayor peso es Gasto de personal porque tiene la carga más alta, la siguiente en importancia es Ventas.

names(acp)
  1. 'sdev'
  2. 'rotation'
  3. 'center'
  4. 'scale'
  5. 'x'

Objeto

Descripción

sdev

Desviación estándar de cada Componente Principal. Los Eigenvalores son sdev^2

rotation

Matriz con las cargas por cada variable y Componente Principal. Las columnas son los Eigenvectores.

center

Promedio de cada variable original

scale

Desviación estándar de cada variable original

x

Proyección de cada variable sobre las Componentes Principales

Número de Componentes Principales:

Para tomar la decisión de cuántos Componentes Principales emplear y reducir la dimensión se aplica la técnica del codo con el Scree plot.

Los Eigenvalores se grafican en orden descendente en magnitud. En el eje \(x\) están los Componentes Principales en el mismo orden que aparecen en summary() y en el eje \(y\) la varianza asociada \(\lambda\).

Scree plot:

En este gráfico se muestra la varianza que logra capturar cada Componente Principal en orden de importancia.

screeplot(acp, main = "Screeplot", col = "blue", type = "lines", pch = 19)
../../_images/output_14_0.png

Biplot:

El Biplot es una comparación de las cargas de las variables en las primera Componentes Principales.

biplot(acp, scale = 0)
../../_images/output_16_0.png

Las variables con mayores cargas en PC1 son las siguientes ordenadas de mayor a menor:

  • Gasto personal.

  • Ventas.

  • Costos y gastos de producción.

  • Gastos en administración y ventas.

En el Biplot estas cuatro variables se muestran con las de mayor desplazamiento en el eje \(x\), PC1.

Las dos variables con las cargas más bajas en PC1 son Gasto financiero e Inversión en AF. En el Biplot se muestran como las de menor desplazamiento horizontal. Son las más cercanas al centro.

Para PC2 se deben observar los desplazamientos verticales. La variable con mayor carga en valor absoluto es Personal mujer, seguido de Personal hombre y de tercera Gastos en administración y ventas, esta última variable con una carga negativa, por eso el desplazamiento es hacia abajo.

Los vectores más cercanos entre sí indican alta correlación. Así que Ventas y Gastos en administración y ventas están muy correlacionadas.

PC1 está positivamente correlacionado con todas las variables.

PC2 está positivamente correlacionado con Personal mujer, Personal hombre, Gasto personal y Gasto financiero. Además, está negativamente correlacionado con Inversión en AF, Costos y gastos de producción y Gastos en administración y ventas.

Lo anterior también se puede analizar con la matriz de rotación.

Conclusión:

Por el criterio del codo escogemos las primeras tres Componentes Principales. Así se resumen las ocho variables en tres dimensiones, las cuales resumen el 76,36% de la varianza total.

Las tres variables son la multiplicación de cada carga por las variables del conjunto de datos.

PC1 <- apply(acp$rotation[, 1]*datos, 1, sum)
PC2 <- apply(acp$rotation[, 2]*datos, 1, sum)
PC3 <- apply(acp$rotation[, 3]*datos, 1, sum)

PC <- cbind(PC1, PC2, PC3)
head(PC)
A matrix: 6 × 3 of type dbl
PC1PC2PC3
102065975 -33763325 2699749
62936669 -42387137-16784958
12595763 2010874 30508600
171289275-136378975-22673169
32005092 55046810 -1972086
47079967 39589641-11339209