OBJETIVOS

RESUMEN

La base de datos escojida para la aplicación del análisis de componentes principales, contiene la información de 98 mujeres atletas de élites que fueron entrenadas en el instituto australiano del deporte. Las variables contenidas en la base de datos son la masa corporal magra (lbm), estatura en centimetros (ht), el peso en kilogramos (wt) y el conteo de globulos rojos (rcc).

Inicialmente verificamos que los datos cumplieran con la condición de los supuestos y se procedio aplicar la técnica del PCA con el fin de transformar el conjunto principal de variables en otro conjunto de nuevas variables incorrelacionadas entre si, que son una trasformación lineal de las variables principales, a estas nuevas variables se le denominan componentes.

INTRODUCIÓN

El PCA pertenece a la familia de técnicas conocidas como unsupervised learning y permite transformar o condensar las variables que cumpla con la variabilidad o correlación entre sí. Este método estadístico tiene como punto de partida una matriz de datos que contiene cierta cantidad de variables y se busca hacer un análisis que determine las componentes principales, está componente deben tener variabilidad en sus datos.

Los componentes principales se definen como las combinaciones lineales de las variables originales que determinan la varianza en los datos de cierta información suministrada, además se debe tener en cuenta que el máximo de componentes extraidos en la base de datos siempre es igual al número de variables.

Una de las aplicaciones más importante del PCA es la reducción de dimensionalidad (variables), que hace que se vaya perdiendo la menor cantidad de varianza cuando contamos con un gran número de variables cuantitativas posiblemente correlacionadas entre sí, lo cual hace que el PCA permita reducirlas a un número menor de variables transformadas (componentes principales) expliquen gran parte de la variabilidad de los datos.

EXPLORACIÓN DE LOS DATOS

datos%>%DT::datatable()
# Resumen estadístico de la base de datos
summary(datos)
##       lbm              ht              wt             rcc       
##  Min.   :34.36   Min.   :148.9   Min.   :37.80   Min.   :3.800  
##  1st Qu.:51.81   1st Qu.:170.9   1st Qu.:60.02   1st Qu.:4.162  
##  Median :55.20   Median :175.0   Median :67.70   Median :4.385  
##  Mean   :54.91   Mean   :174.6   Mean   :67.08   Mean   :4.406  
##  3rd Qu.:59.52   3rd Qu.:179.7   3rd Qu.:74.38   3rd Qu.:4.553  
##  Max.   :72.98   Max.   :195.9   Max.   :96.30   Max.   :5.330
# Estructura de la base de datos

str(datos)
## tibble [98 x 4] (S3: tbl_df/tbl/data.frame)
##  $ lbm: num [1:98] 60.2 41.5 48.3 47.6 61.9 ...
##  $ ht : num [1:98] 186 156 174 162 189 ...
##  $ wt : num [1:98] 75.2 49.8 62.3 52.8 75.5 51.9 74.3 96.3 74.4 64.7 ...
##  $ rcc: num [1:98] 4.31 4.21 4.42 4.2 4.62 4.52 4.44 4.71 4.41 5.31 ...
# Nombre de las variables

names(datos)
## [1] "lbm" "ht"  "wt"  "rcc"

Correlación lineal entre las variables

# Correlación entre variables 

ggpairs(datos) +
labs(title = "Diagrama de dispersión con correlaciones")+
theme_bw() +
theme(plot.title = element_text(hjust = 0.5)) 

# Matriz de correlación redondeada a 7 unidades

round(cor(datos),7)
##           lbm        ht        wt       rcc
## lbm 1.0000000 0.7113271 0.9391796 0.0852420
## ht  0.7113271 1.0000000 0.7150643 0.0146028
## wt  0.9391796 0.7150643 1.0000000 0.0205492
## rcc 0.0852420 0.0146028 0.0205492 1.0000000

Estandarización de los datos

Si no se estandarizan las variables para que tengan media cero y desviación estándar 1 antes de realizar el estudio PCA, la variable ht dominará la mayoría de las componentes principales.Por lo tanto, se resta a cada valor la media de la variable a la que pertenece. Con esto se consigue centralizar las variables y que su media sea 0.

standardise<- datos
standardise$lbm <- datos$lbm - mean(datos$lbm)
standardise$ht <- datos$ht - mean(datos$ht)
standardise$wt <- datos$wt - mean(datos$wt)
standardise$rcc <- datos$rcc - mean(datos$rcc)
standardise
## # A tibble: 98 x 4
##       lbm      ht     wt      rcc
##     <dbl>   <dbl>  <dbl>    <dbl>
##  1   5.26  11.6     8.12 -0.0962 
##  2 -13.4  -18.6   -17.3  -0.196  
##  3  -6.58  -0.765  -4.78  0.0138 
##  4  -7.34 -12.6   -14.3  -0.206  
##  5   6.94  14.1     8.42  0.214  
##  6 -12.0   -5.97  -15.2   0.114  
##  7   6.38   4.93    7.22  0.0338 
##  8  13.6   18.8    29.2   0.304  
##  9   3.64  15.1     7.32  0.00378
## 10   2.63  -0.465  -2.38  0.904  
## # ... with 88 more rows
estandarización=scale(datos)
# Matriz de covarianza 

matriz_cov <- cov(standardise)
matriz_cov
##            lbm          ht           wt        rcc
## lbm 48.8803634 41.30914749  71.29967042 0.19294510
## ht  41.3091475 68.99527877  64.49505365 0.03926972
## wt  71.2996704 64.49505365 117.90800021 0.07224037
## rcc  0.1929451  0.03926972   0.07224037 0.10481550
# Estandarización de la media

apply(X = datos, MARGIN = 2, FUN = mean)
##        lbm         ht         wt        rcc 
##  54.914796 174.565306  67.076531   4.406224
# Estandarización de la varianza 

apply(X =datos, MARGIN = 2, FUN = var)
##         lbm          ht          wt         rcc 
##  48.8803634  68.9952788 117.9080002   0.1048155
# eigenvalues

eigen <- eigen(matriz_cov)
eigen$values
## [1] 205.5596405  26.0637080   4.1644076   0.1007018
# eigenvectores
eigen$vectors
##               [,1]         [,2]        [,3]         [,4]
## [1,] -0.4648174308 -0.234717025  0.85329356 -0.027254008
## [2,] -0.4891474961  0.871793708 -0.02658981  0.001854618
## [3,] -0.7380236174 -0.429977925 -0.51982604  0.014866504
## [4,] -0.0007895071 -0.001622341  0.03104800  0.999516266
# Valores propios 

ais.active<-standardise[,1:ncol(standardise)]
res.pca <- PCA(ais.active, graph = FALSE)
eig.val <- get_eigenvalue(res.pca)
eig.val
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1 2.58533346        64.633336                    64.63334
## Dim.2 1.00027282        25.006820                    89.64016
## Dim.3 0.35580812         8.895203                    98.53536
## Dim.4 0.05858561         1.464640                   100.00000
  • En la dimensión 1, el valor propio es 2.58533346 >1, lo que implica que su componente principal PC1 representa más varianza de la que explica una de las variables originales en los datos.

Análisis de componentes principales

Supuestos

  • La base de datos contiene variables númericas
  • Existe relación lineal entre las variables
  • Tiene una buena adecuación de la muestra
  • Los datos presentan correlaciones adecuadas
  • Existen datos atípicos pero no son tan influyentes
pca <- princomp(standardise, cor=TRUE)
pca
## Call:
## princomp(x = standardise, cor = TRUE)
## 
## Standard deviations:
##    Comp.1    Comp.2    Comp.3    Comp.4 
## 1.6078972 1.0001364 0.5964965 0.2420446 
## 
##  4  variables and  98 observations.
summary(pca)
## Importance of components:
##                           Comp.1    Comp.2     Comp.3    Comp.4
## Standard deviation     1.6078972 1.0001364 0.59649654 0.2420446
## Proportion of Variance 0.6463334 0.2500682 0.08895203 0.0146464
## Cumulative Proportion  0.6463334 0.8964016 0.98535360 1.0000000
prc<-prcomp(datos, center = TRUE, scale. = TRUE)
prc
## Standard deviations (1, .., p=4):
## [1] 1.6078972 1.0001364 0.5964965 0.2420446
## 
## Rotation (n x k) = (4 x 4):
##             PC1         PC2         PC3          PC4
## lbm -0.59604653  0.02431702 -0.38113698  0.706308589
## ht  -0.53654149 -0.06060311  0.84168775  0.003494673
## wt  -0.59569501 -0.04457075 -0.38000813 -0.706225686
## rcc -0.04471254  0.99686980  0.04347585 -0.048592644
summary(prc)
## Importance of components:
##                           PC1    PC2     PC3     PC4
## Standard deviation     1.6079 1.0001 0.59650 0.24204
## Proportion of Variance 0.6463 0.2501 0.08895 0.01465
## Cumulative Proportion  0.6463 0.8964 0.98535 1.00000
  • La primera componente explica 64,6% de la varianza observada en los datos y la segunda componente explica el 25%.

  • La porción de varianza explicada por las dos primeras componentes es aproximadamente el 90%.

  • La tercera y la cuarta componente no superan por separado el 1% de varianza explicada.

  • La primera componente es el resultado de la siguiente combinación lineal de las variables originales:

\[PC1=-0.59604653 lbm -0.53654149 ht -0.59569501 wt -0.04471254 rcc\]

  • La información asignada en la primera componente a las variables wt, lbm y ht son aproximadamente iguales entre ellos y muy superior al asignado a rcc.

  • En la segunda componente es la variable rcc la que aporta mayor información en comparación a las variables wt, lbm y ht que aportan poca información.

Varianza explicada por cada componente

pca$sdev^2
##     Comp.1     Comp.2     Comp.3     Comp.4 
## 2.58533346 1.00027282 0.35580812 0.05858561
plot(pca, type="l")

fviz_eig(res.pca, addlabels = TRUE, ylim = c(0, 80))

  • La varianza explicada es mayor en la primera componente que en las demas componentes.

  • Aplicando la técnica del codo elijimos la primera y la segunda componente principal y rechazamos la tercera y la cuarta componente.

# Grafico de las dos primeras componentes principales 

biplot(x = pca, scale = 0, cex = 0.5, col = c("blue4", "brown3"))

  • El gráfico nos indica que los individuos como 10 y 15 tienen un valor alto para la variable rcc.

  • Los individuos 5 y 44 tienen un valor alto para la variable lbm, ya que están en el mismo lado de la variable.

  • Los individuos 95 y 19 tienen un valor bajo para la variable wt, ya que se encuentran en el lado opuesto de dicha variable.

Análisis de variables

# Información de las variables

var <- get_pca_var(res.pca)
var
## 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"
# Coordenadas 

head(var$coord)
##          Dim.1       Dim.2       Dim.3         Dim.4
## lbm 0.95838156  0.02432033 -0.22734689 -0.1709582067
## ht  0.86270357 -0.06061137  0.50206383 -0.0008458669
## wt  0.95781635 -0.04457683 -0.22667353  0.1709381406
## rcc 0.07189317  0.99700577  0.02593319  0.0117615890
# Cos2

head(var$cos2)
##           Dim.1        Dim.2        Dim.3        Dim.4
## lbm 0.918495206 0.0005914787 0.0516866067 2.922671e-02
## ht  0.744257457 0.0036737385 0.2520680894 7.154908e-07
## wt  0.917412167 0.0019870939 0.0513808908 2.921985e-02
## rcc 0.005168628 0.9940205066 0.0006725305 1.383350e-04
# Constribucion de las variables a las componentes

head(var$contrib)
##          Dim.1       Dim.2      Dim.3        Dim.4
## lbm 35.5271465  0.05913173 14.5265395 49.887182236
## ht  28.7876774  0.36727365 70.8438276  0.001221274
## wt  35.4852549  0.19865519 14.4406179 49.875471980
## rcc  0.1999211 99.37493943  0.1890149  0.236124510
# Coordenadas de las variables


head(var$coord, 4)
##          Dim.1       Dim.2       Dim.3         Dim.4
## lbm 0.95838156  0.02432033 -0.22734689 -0.1709582067
## ht  0.86270357 -0.06061137  0.50206383 -0.0008458669
## wt  0.95781635 -0.04457683 -0.22667353  0.1709381406
## rcc 0.07189317  0.99700577  0.02593319  0.0117615890
# Circulo de correlaciones 

fviz_pca_var(res.pca, col.var = "red",repel = TRUE)

Calidad de representación - coseno cuadrado

# Coordenadas de las variables
head(var$coord, 4)
##          Dim.1       Dim.2       Dim.3         Dim.4
## lbm 0.95838156  0.02432033 -0.22734689 -0.1709582067
## ht  0.86270357 -0.06061137  0.50206383 -0.0008458669
## wt  0.95781635 -0.04457683 -0.22667353  0.1709381406
## rcc 0.07189317  0.99700577  0.02593319  0.0117615890
head(var$cos2, 4)
##           Dim.1        Dim.2        Dim.3        Dim.4
## lbm 0.918495206 0.0005914787 0.0516866067 2.922671e-02
## ht  0.744257457 0.0036737385 0.2520680894 7.154908e-07
## wt  0.917412167 0.0019870939 0.0513808908 2.921985e-02
## rcc 0.005168628 0.9940205066 0.0006725305 1.383350e-04
corrplot(var$cos2, is.corr=FALSE)

fviz_cos2(res.pca, choice = "var", axes = 1:2)

#Circulo de correlación

# Color por valores de cos2: calidad en el mapa de factores

fviz_pca_var(res.pca, col.var = "cos2",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), 
             repel = TRUE # Avoid text overlapping
             )

  • las variables rcc, wt, lbm y ht tienen un coseno cuadrado alto, por lo tanto, tienen una buena representación en el componente principal en las dimesiones 1 y 2.

  • La correlación entre la dimesión 1 y las variables lbm, ht y wt es muy alta, por lo tanto la primera dimesión absorbe información que es común en esas variables.

  • La dimesión 2 tiene relación con la variable rcc y captura información de dicha variable.

  • La dimesión 3 captura mas información de la variable ht y recibe poca información de las variables lbm.

  • La dimesión 4 captura poca información de las variables lbm y wt.

  • Las variables rcc, wt, lbm y ht representan muy bien las dimensiones 1 y 2.

  • El vector de la variable rcc es ortogonal con los vectores variables lbm, ht y wt, lo cual implica que las variables no están correlacionadas.

  • Los vectores variables lbm, ht y wt tienen ángulos pequeños, por lo tanto su correlación es alta.

  • Como las variables se encuentran cerca de la circunferencia del circulo de correlación, las variables rcc, wt, lb y ht tienen una buena representación.

  • La proyección para la variable rcc es muy buena.

Contribuciones de variables a las PC

# Constribucion de cada variable a cada componente 

res.val <- get_pca_var(pca)
res.val$contrib
##          Dim.1       Dim.2      Dim.3        Dim.4
## lbm 35.5271465  0.05913173 14.5265395 49.887182236
## ht  28.7876774  0.36727365 70.8438276  0.001221274
## wt  35.4852549  0.19865519 14.4406179 49.875471980
## rcc  0.1999211 99.37493943  0.1890149  0.236124510
# Contributions of variables to PC1
fviz_contrib(res.pca, choice = "var", axes = 1, top = 4)

# Contributions of variables to PC2
fviz_contrib(res.pca, choice = "var", axes = 2, top = 4)

# Contributions of variables to PC3
fviz_contrib(res.pca, choice = "var", axes = 3, top = 4)

# Contributions of variables to PC4
fviz_contrib(res.pca, choice = "var", axes = 4, top = 4)

# Contribuciones de las variables en los ejes

corrplot(var$contrib, is.corr=FALSE) 

# Grafica de correlación de las variables mas constribuyentes 

fviz_pca_var(res.pca, col.var = "contrib",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"))

  • Las variables lbm, wt y ht están relacionadas con la dimensión 1 y la variable rcc esta relacionada con la dimensión 2, por lo tanto, estas variables son las mas importantes para explicar la variablidad en el conjunto de datos.

  • Las variables lbm, wt y ht son muy importante para la constribución de la componente PC1.

  • La variable rcc es muy importante para la constribución de la componente PC2.

  • La variable ht es importante para la constribución de la componente PC3.

  • Las variables lbm y wt son importantes para la constribución de la componente PC4.