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")
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.
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.
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)