Analisis de Componentes principales

Motivacion

Uno de los mayores problemas a los que se enfrentan los analistas de conjuntos de datos multivariados es la gran dimensionalidad que puede dificultar la comprensión del fenómeno estudiado, el análisis de componentes principales se presenta como una solución, ya que tiene como objetivo reducir la dimensionalidad del conjunto de datos buscando conservar la mayor cantidad de información posible. Esto se consigue a partir de una transformación del dataset original en un nuevo conjunto de variables llamadas “componentes principales” las cuales son combinaciones lineales no correlacionadas de las variables originales

library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 4.2.3
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.2.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.2.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(readxl)
## Warning: package 'readxl' was built under R version 4.2.3
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'tidyr' was built under R version 4.2.3
## Warning: package 'readr' was built under R version 4.2.3
## Warning: package 'purrr' was built under R version 4.2.3
## Warning: package 'dplyr' was built under R version 4.2.3
## Warning: package 'stringr' was built under R version 4.2.3
## Warning: package 'forcats' was built under R version 4.2.3
## Warning: package 'lubridate' was built under R version 4.2.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(MVN)
## Warning: package 'MVN' was built under R version 4.2.3
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.2.3
## corrplot 0.92 loaded
library(datasets)
medidas <- read_excel("C:\\Users\\camil\\Downloads\\medidas.xlsx")

Pertinencia

Primero que todo, se debe evaluar si las correlaciones entre las variables son lo suficientemente fuertes como para poder aplicar la tecnica

summary(medidas)
##        X1              X2              X3              X4       
##  Min.   :156.0   Min.   :122.5   Min.   :147.0   Min.   :41.50  
##  1st Qu.:163.0   1st Qu.:154.3   1st Qu.:153.1   1st Qu.:46.25  
##  Median :168.5   Median :167.1   Median :158.5   Median :48.50  
##  Mean   :168.7   Mean   :162.0   Mean   :158.9   Mean   :48.81  
##  3rd Qu.:173.2   3rd Qu.:172.8   3rd Qu.:162.5   3rd Qu.:52.00  
##  Max.   :186.0   Max.   :184.7   Max.   :175.1   Max.   :57.00  
##        X5              X6              X7              X8       
##  Min.   :30.70   Min.   :23.00   Min.   :12.00   Min.   :36.10  
##  1st Qu.:35.00   1st Qu.:27.05   1st Qu.:15.50   1st Qu.:58.95  
##  Median :38.40   Median :31.00   Median :17.00   Median :61.60  
##  Mean   :38.09   Mean   :29.67   Mean   :17.78   Mean   :60.91  
##  3rd Qu.:41.25   3rd Qu.:31.90   3rd Qu.:19.80   3rd Qu.:64.65  
##  Max.   :44.20   Max.   :34.00   Max.   :23.00   Max.   :73.70
s <-cov(medidas);s
##           X1        X2        X3       X4       X5        X6        X7
## X1  65.38328 128.57895  62.36674 34.59998 28.09002 26.176265 23.096700
## X2 128.57895 298.98901 123.18366 70.37285 57.81625 58.026957 46.581621
## X3  62.36674 123.18366  60.81170 33.18156 26.94162 25.512806 22.119822
## X4  34.59998  70.37285  33.18156 19.11300 15.54518 14.279565 12.633933
## X5  28.09002  57.81625  26.94162 15.54518 13.45300 12.016798 10.553794
## X6  26.17626  58.02696  25.51281 14.27957 12.01680 11.970553  9.522846
## X7  23.09670  46.58162  22.11982 12.63393 10.55379  9.522846  8.685415
## X8  53.03605 117.86235  50.67589 28.86988 24.46466 22.825771 19.798834
##           X8
## X1  53.03605
## X2 117.86235
## X3  50.67589
## X4  28.86988
## X5  24.46466
## X6  22.82577
## X7  19.79883
## X8  55.00628
R<-cor(medidas);R
##           X1        X2        X3        X4        X5        X6        X7
## X1 1.0000000 0.9196211 0.9890679 0.9787641 0.9471288 0.9356582 0.9692176
## X2 0.9196211 1.0000000 0.9135491 0.9309214 0.9116175 0.9699404 0.9140958
## X3 0.9890679 0.9135491 1.0000000 0.9732822 0.9419341 0.9456002 0.9624823
## X4 0.9787641 0.9309214 0.9732822 1.0000000 0.9694415 0.9440465 0.9805704
## X5 0.9471288 0.9116175 0.9419341 0.9694415 1.0000000 0.9469391 0.9763459
## X6 0.9356582 0.9699404 0.9456002 0.9440465 0.9469391 1.0000000 0.9339301
## X7 0.9692176 0.9140958 0.9624823 0.9805704 0.9763459 0.9339301 1.0000000
## X8 0.8843652 0.9190546 0.8761968 0.8903779 0.8993391 0.8895332 0.9058122
##           X8
## X1 0.8843652
## X2 0.9190546
## X3 0.8761968
## X4 0.8903779
## X5 0.8993391
## X6 0.8895332
## X7 0.9058122
## X8 1.0000000
T=cor.mtest(medidas,conf.level=0.99)
corrplot(R,p.mat=T$p,sig.level=0.01,type="upper",diag=FALSE,addCoef.col = "black",tl.col = "black",cl.ratio = 0.3)

En este caso, la técnica resulta pertinente para el análisis, dado que el ACP es una herramienta útil, especialmente porque existe una alta correlación entre todas las variables (8). Mediante el ACP, es posible ilustrar la relación entre las variables a partir de la reducción de la dimensionalidad.

Cantidad de componentes

scale.unit determina si se usa la matriz de covarianzas(=TRUE) o la matriz de correlacion(=FALSE)

pca<-PCA(medidas,scale.unit= TRUE, graph = F)
summary(pca)
## 
## Call:
## PCA(X = medidas, scale.unit = TRUE, graph = F) 
## 
## 
## Eigenvalues
##                        Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6   Dim.7
## Variance               7.557   0.188   0.118   0.073   0.033   0.016   0.012
## % of var.             94.459   2.349   1.476   0.910   0.409   0.195   0.145
## Cumulative % of var.  94.459  96.808  98.284  99.194  99.603  99.798  99.943
##                        Dim.8
## Variance               0.005
## % of var.              0.057
## Cumulative % of var. 100.000
## 
## Individuals (the 10 first)
##        Dist    Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
## 1  |  6.101 | -5.866 19.798  0.924 | -1.523 53.636  0.062 | -0.696 17.836
## 2  |  4.627 | -4.586 12.102  0.983 | -0.047  0.050  0.000 |  0.517  9.835
## 3  |  3.868 | -3.790  8.264  0.960 | -0.126  0.370  0.001 |  0.598 13.168
## 4  |  3.302 | -3.213  5.939  0.946 | -0.016  0.006  0.000 |  0.718 18.969
## 5  |  2.676 | -2.605  3.905  0.948 |  0.487  5.482  0.033 |  0.063  0.147
## 6  |  2.280 | -2.182  2.740  0.916 |  0.385  3.423  0.028 |  0.246  2.233
## 7  |  1.649 | -1.526  1.340  0.857 |  0.416  4.008  0.064 | -0.046  0.079
## 8  |  1.149 | -0.939  0.508  0.668 |  0.265  1.625  0.053 | -0.076  0.215
## 9  |  0.770 | -0.489  0.138  0.403 |  0.330  2.518  0.184 | -0.333  4.090
## 10 |  0.718 | -0.317  0.058  0.195 |  0.418  4.041  0.339 | -0.348  4.465
##      cos2  
## 1   0.013 |
## 2   0.012 |
## 3   0.024 |
## 4   0.047 |
## 5   0.001 |
## 6   0.012 |
## 7   0.001 |
## 8   0.004 |
## 9   0.187 |
## 10  0.235 |
## 
## Variables
##       Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr   cos2  
## X1 |  0.981 12.734  0.962 | -0.134  9.601  0.018 |  0.009  0.070  0.000 |
## X2 |  0.962 12.238  0.925 |  0.192 19.642  0.037 | -0.170 24.489  0.029 |
## X3 |  0.978 12.662  0.957 | -0.143 10.825  0.020 | -0.024  0.493  0.001 |
## X4 |  0.987 12.879  0.973 | -0.108  6.159  0.012 |  0.016  0.225  0.000 |
## X5 |  0.977 12.627  0.954 | -0.055  1.638  0.003 |  0.068  3.893  0.005 |
## X6 |  0.973 12.532  0.947 |  0.062  2.051  0.004 | -0.190 30.425  0.036 |
## X7 |  0.983 12.794  0.967 | -0.089  4.227  0.008 |  0.102  8.727  0.010 |
## X8 |  0.934 11.535  0.872 |  0.294 45.858  0.086 |  0.193 31.679  0.037 |

En este caso, si se utiliza el criterio de varianza acumulada, la cantidad de componentes a emplear sería una, ya que la primera componente explica el 94 % de la varianza total.

perc_varianza_acum<- pca$eig[,3]
perc_varianza_acum
##    comp 1    comp 2    comp 3    comp 4    comp 5    comp 6    comp 7    comp 8 
##  94.45901  96.80824  98.28394  99.19442  99.60329  99.79787  99.94318 100.00000
ggplot(data = data.frame(perc_varianza_acum, pc = 1:8),
       aes(x = pc, y = perc_varianza_acum, group = 1)) +
  geom_point() +
  geom_line() +
  theme_bw() +
  labs(x = "Componente principal",
       y = "% Varianza explicada acumulada")

Por otro lado, si se aplica el criterio de Kaiser, el único autovalor (eigenvalor) mayor que uno corresponde también a la primera componente.

Contribución de los componentes, correlaciones y calidad de la representación

Dentro del análisis del PCA es fundamental interpretar las contribuciones, las correlaciones y la calidad de representación de las variables en los componentes. La primera de ellas, indica qué tanto aporta cada variable o individuo a la formación de un componente principal, ayudando a identificar cuáles influyen más en su construcción. Las correlaciones muestran el grado de relación entre las variables originales y los componentes. Por su parte, la calidad de representación (medida a través del coseno cuadrado) evalúa qué tan bien una variable o individuo está representado por los componentes seleccionados. Valores altos indican una buena representación, mientras que valores bajos sugieren lo contrario.

fviz_contrib(pca,choice="var",axes=1)

En este caso, se concluye que casi todas las variables contribuyen en igual medida a la construcción de la componente. Dado que todas las variables corresponden a medidas antropométricas, la componente podría denominarse de esa manera.

Cabe destacar que las dimensiones o componentes que surgen a partir del ACP pueden, en algunos casos, interpretarse como indicadores de ciertos factores o características subyacentes.

fviz_pca_biplot(pca)