INFORME 3: Principal Component Analysis

3.1 Introducción

Mediante el análisis de componentes principales (ACP), podemos resumir y visualizar la información de un conjunto de datos que contiene individuos/observaciones descritos por varias variables cuantitativas interdependientes. Cada variable puede considerarse como una dimensión diferente. El análisis de componentes principales se utiliza para extraer información importante de una tabla de datos multivariable y expresar esta información en términos de un conjunto de nuevas variables denominadas componentes principales. Estas nuevas variables corresponden a una combinación lineal de las variables originales. El número de componentes principales es inferior o igual al número de variables originales. La información contenida en un determinado conjunto de datos corresponde a la variación total que contiene. El objetivo del ACP es identificar las direcciones (o componentes principales) a lo largo de las cuales la variación de los datos es mayor. En otras palabras, el ACP reduce la dimensionalidad de los datos multivariantes a dos o tres componentes principales que pueden visualizarse gráficamente con una pérdida mínima de información. Además, mostramos cómo descubrir las principales variables que explican las variaciones de un conjunto de datos.

3.2 Bases

Para entender los detalles del PCA es necesario tener conocimientos de álgebra lineal. Aquí explicaremos sólo lo básico con una simple representación gráfica de los datos. En la Figura 1A, los datos se representan en el sistema de coordenadas X-Y. La reducción de la dimensión se consigue identificando las direcciones principales, llamadas componentes principales, en las que varían los datos. En la figura siguiente, el eje PC1 es la primera dirección principal a lo largo de la cual las muestras muestran la mayor variación. El eje PC2 es la segunda dirección principal y es ortogonal al eje PC1. La dimensionalidad de nuestros datos bidimensionales puede reducirse a una sola dimensión proyectando cada muestra sobre el primer componente principal (Plot 1B).

Figura 1.

Técnicamente hablando, la cantidad de varianza retenida por cada componente principal se mide por el llamado valor propio. Tenga en cuenta que, el método PCA es particularmente útil cuando las variables dentro del conjunto de datos están altamente correlacionadas. La correlación indica que hay redundancia en los datos. Debido a esta redundancia, el PCA puede utilizarse para reducir las variables originales a un número menor de nuevas variables (=componentes principales) que expliquen la mayor parte de la varianza de las variables originales.

Figura 2.

En general, el objetivo principal del análisis de componentes principales es:

  1. Identificar patrones ocultos en un conjunto de datos.

  2. Reducir la dimensionalidad de los datos eliminando el ruido y la incertidumbre de los mismos.

  3. Identificar variables correlacionadas.

3.3 Computación

3.3.1 R paquetes

El software R dispone de varias funciones de diferentes paquetes para calcular el ACP:

•prcomp() andprincomp() [built-in Rstatspackage],

•PCA() [FactoMineRpackage],

•dudi.pca() [ade4package],

•andepPCA() [ExPositionpackage]

Independientemente de la función que decida utilizar, puede extraer y visualizar fácilmente los resultados del PCA utilizando las funciones de R proporcionadas en el paquete R. En este caso, utilizaremos los dos paquetes FactoMineR (para el análisis) y factoextra (para la visualización basada en el gráfico 2)

Instalamos las páginas:

install.packages(c("FactoMineR","factoextra"))
## Installing packages into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)

Ahora, los cargamos en R, escribiendo esto:

library("FactoMineR")
library("factoextra")
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(ggplot2)

3.3.2 Formato de datos

Utilizaremos los conjuntos de datos de demostración “Decathlon2” del paquete “Factoex”:

data(decathlon2)
# head(decathlon2)

Como se ilustra en la figura 3.1, los datos utilizados aquí describen el rendimiento de los atletas durante dos pruebas deportivas (Desctar y OlympicG). Contiene 27 individuos (atletas) descritos por 13 variables. Como nota, sólo algunos de estos individuos y variables se utilizarán para realizar el análisis de componentes principales. Las coordenadas de los restantes individuos y variables en el mapa de factores se predecirán después del ACP.

En la terminología del PCA, nuestros datos contienen: Individuos activos (en azul claro, filas 1:23): Individuos que se utilizan durante el análisis de componentes principales. E Individuos suplementarios (en azul oscuro, filas 24:27): Las coordenadas de estos individuos se predecirán utilizando la información y los parámetros del PCA obtenidos con los individuos variables activos.

Figura 3.1. Formato de análisis de datos de componentes principales

Variables activas (en rosa, columnas 1:10) : Variables que se utilizan para el análisis de componentes principales. Variables suplementarias: Como individuos suplementarios, las coordenadas de estas variables se predecirán también. Pueden ser: Variables continuas suplementarias (rojo): Las columnas 11 y 12 corresponden, respectivamente, al rango y a los puntos de los deportistas. Variables cualitativas suplementarias (verde): La columna 13 corresponde a los dos encuentros atléticos (Juego Olímpico 2004 o Decastar 2004) y es una variable categórica (o factor). Puede utilizarse para colorear a los individuos por grupos. Comenzamos con un subconjunto de individuos activos y variables activas para el análisis de componentes principales:

decathlon2.active <-decathlon2[1:23,1:10]
head(decathlon2.active[,1:6],4)
##         X100m Long.jump Shot.put High.jump X400m X110m.hurdle
## SEBRLE  11.04      7.58    14.83      2.07 49.81        14.69
## CLAY    10.76      7.40    14.26      1.86 49.37        14.05
## BERNARD 11.02      7.23    14.25      1.92 48.93        14.99
## YURKOV  11.34      7.09    15.19      2.10 50.42        15.31

3.3.3 Estandarización de datos

En el análisis de componentes principales, las variables suelen escalarse (es decir, estandarizarse). Esto es especialmente recomendable cuando las variables se miden en diferentes escalas (por ejemplo, kilogramos, kilómetros, centímetros, etc.); de lo contrario, los resultados del ACP se verán muy afectados. El objetivo es hacer que las variables sean comparables. Por lo general, las variables se escalan para que tengan i) una desviación estándar de uno y ii) una media de cero. La estandarización de los datos es un enfoque ampliamente utilizado en el contexto del análisis de datos de expresión génica antes del PCA y del análisis de clúster:

\[ \frac{xi-mean(x)}{sd(x)} \] Donde media (x) es la media de los valores de x, y sd(x) es la desviación estándar (SD). La función base de Rcale() puede utilizarse para normalizar los datos. Toma una matriz numérica como entrada y realiza el escalado en las columnas. Tenga en cuenta que, por defecto, la funciónPCA() [inFactoMineR], estandariza los datos automáticamente durante el PCA; por lo que no es necesario hacer esta transformación antes del PCA.

3.3.4 R código

Se puede utilizar la funciónPCA() [FactoMineRpackage]. Simplificando lo anterior esto sería:

PCA(X, scale.unit=TRUE, ncp =5, graph =TRUE)

Aquí X es un marco de datos. Las filas son individuos y las columnas son variables numéricas. Por otro lado, scale.unit es un valor lógico. Si es TRUE , los datos se escalan a la unidad de varianza antes del análisis. Esta estandarización a la misma escala evita que algunas variables sean dominantes sólo por sus grandes unidades de medida. Hace que las variables sean comparables. También ncp es el número de dimensiones que se conservan en los resultados finales. Finalmente, graph: un valor lógico. Si es TRUE, se muestra un gráfico. El código R siguiente calcula el análisis de componentes principales en los individuos/variables activos:

library("FactoMineR")
res.pca <-PCA(decathlon2.active,graph =FALSE)

La salida de la función PCA() es una lista que incluye los siguientes componentes:

print(res.pca)
## **Results for the Principal Component Analysis (PCA)**
## The analysis was performed on 23 individuals, described by 10 variables
## *The results are available in the following objects:
## 
##    name               description                          
## 1  "$eig"             "eigenvalues"                        
## 2  "$var"             "results for the variables"          
## 3  "$var$coord"       "coord. for the variables"           
## 4  "$var$cor"         "correlations variables - dimensions"
## 5  "$var$cos2"        "cos2 for the variables"             
## 6  "$var$contrib"     "contributions of the variables"     
## 7  "$ind"             "results for the individuals"        
## 8  "$ind$coord"       "coord. for the individuals"         
## 9  "$ind$cos2"        "cos2 for the individuals"           
## 10 "$ind$contrib"     "contributions of the individuals"   
## 11 "$call"            "summary statistics"                 
## 12 "$call$centre"     "mean of the variables"              
## 13 "$call$ecart.type" "standard error of the variables"    
## 14 "$call$row.w"      "weights for the individuals"        
## 15 "$call$col.w"      "weights for the variables"

El objeto que se crea con la función PCA() contiene mucha información que se encuentra en muchas listas y matrices diferentes. Estos valores se describen en la siguiente sección.

3.4 Visualización e interpretación

Utilizaremos el paquete FactoextraR para ayudar a la interpretación del PCA. Independientemente de la función que elija utilizar [stats::prcomp(), FactoMiner::PCA(), ade4::dudi.pca(),ExPosition::epPCA()], puede extraer y visualizar fácilmente los resultados del PCA utilizando las funciones de R proporcionadas en el paquete FactoextraR. Estas funciones incluyen:

Estas funciones incluyen:

-get_eigenvalue(res.pca): Extrae los valores propios/varianzas de los componentes principales

-fviz_eig(res.pca): Visualiza los valores propios

-get_pca_ind(res.pca),get_pca_var(res.pca): Extrae los resultados de los individuos y las variables, respectivamente.

-fviz_pca_ind(res.pca),fviz_pca_var(res.pca): Visualizar los resultados individuos y variables, respectivamente.

-fviz_pca_biplot(res.pca): Realiza un biplot de individuos y variables.

En las próximas secciones, ilustraremos cada una de estas funciones.

3.4.1 Eigenvalues / Varianzas

Utilizaremos el paquete FactoextraR para ayudar a la interpretación del PCA. Independientemente de la función que elija utilizar [stats::prcomp(), FactoMiner::PCA(), ade4::dudi.pca(),ExPosition::epPCA()], puede extraer y visualizar fácilmente los resultados del PCA utilizando las funciones de R proporcionadas en el paquete FactoextraR. Estas funciones incluyen:

Estas funciones incluyen:

-get_eigenvalue(res.pca): Extrae los valores propios/varianzas de los componentes principales

-fviz_eig(res.pca): Visualiza los valores propios

-get_pca_ind(res.pca),get_pca_var(res.pca): Extrae los resultados de los individuos y las variables, respectivamente.

-fviz_pca_ind(res.pca),fviz_pca_var(res.pca): Visualizar los resultados individuos y variables, respectivamente.

-fviz_pca_biplot(res.pca): Realiza un biplot de individuos y variables.

En las próximas secciones, ilustraremos cada una de estas funciones.

library("factoextra")
eig.val <-get_eigenvalue(res.pca)
eig.val
##        eigenvalue variance.percent cumulative.variance.percent
## Dim.1   4.1242133        41.242133                    41.24213
## Dim.2   1.8385309        18.385309                    59.62744
## Dim.3   1.2391403        12.391403                    72.01885
## Dim.4   0.8194402         8.194402                    80.21325
## Dim.5   0.7015528         7.015528                    87.22878
## Dim.6   0.4228828         4.228828                    91.45760
## Dim.7   0.3025817         3.025817                    94.48342
## Dim.8   0.2744700         2.744700                    97.22812
## Dim.9   0.1552169         1.552169                    98.78029
## Dim.10  0.1219710         1.219710                   100.00000

Por ejemplo, 4,124 dividido por 10 es igual a 0,4124, es decir, aproximadamente el 41,24% de la variación se explica por este primer valor propio. El porcentaje acumulado explicado se obtiene sumando las proporciones sucesivas de la variación explicada para obtener el total acumulado. Por ejemplo, 41,242% más 18,385% es igual a 59,627%, y así sucesivamente. Por lo tanto, aproximadamente el 59,627% de la variación se explica por los dos primeros valores propios juntos. Lamentablemente, no existe una forma objetiva bien aceptada de decidir cuántos componentes principales son suficientes. componentes son suficientes. Esto dependerá del campo de aplicación específico y del conjunto de datos concreto. En la práctica, solemos fijarnos en los primeros componentes principales para encontrar patrones interesantes en los datos. Un método alternativo para determinar el número de componentes principales es observar el Scree Plot, que es el gráfico de los valores propios ordenados de mayor a menor. El número de componentes se determina en el punto a partir del cual los restantes valores propios son todos relativamente pequeños y de tamaño comparable (Jollife,2002,Peres-Neto et al.(2005)). Es por esto, que se usa la función:

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

A partir del gráfico anterior, podemos detenernos en el quinto elemento fundamental. El 87% de la información (varianzas) que contienen los datos es captada por los cinco primeros componentes principales.

3.4.2 Gráfico de variables

3.4.2.1 Resultados

Un mecanismo eficaz que permite extraer los resultados de las variables de la salida de un PCA es utilizar la funciónget_pca_var() [factoextrapackage]. Esta función proporciona una lista de matrices que incluyen todos los resultados de las variables activas (coordenadas, correlación entre variables y ejes, coseno cuadrado y contribuciones).

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"

Los componentes de la funciónget_pca_var() pueden utilizarse en el gráfico de las variables de la siguiente manera: Los componentes de la funciónget_pca_var() pueden utilizarse en el gráfico de las variables de la siguiente manera:

-var\(coord: coordenadas de las variables para crear un gráfico de dispersión -var\)cos2: representa la calidad de la representación de las variables en el mapa de factores y se calcula como las coordenadas al cuadrado: var.cos2 = var.coord * var.coord

-var$contrib: contiene las contribuciones (en porcentaje) de las variables a los componentes principales. La contribución de una variable (var) a un componente principal determinado es (en porcentaje) (var.cos2 * 100) / (cos2 total del componente).

Tenga en cuenta que es posible trazar las variables y colorearlas según i) su calidad en el mapa de factores (cos2) o ii) sus valores de contribución a los componentes principales (contrib). Se puede acceder a los diferentes componentes de la siguiente manera:

# Coordenadas
head(var$coord)
##                   Dim.1       Dim.2      Dim.3       Dim.4      Dim.5
## X100m        -0.8506257 -0.17939806  0.3015564  0.03357320 -0.1944440
## Long.jump     0.7941806  0.28085695 -0.1905465 -0.11538956  0.2331567
## Shot.put      0.7339127  0.08540412  0.5175978  0.12846837 -0.2488129
## High.jump     0.6100840 -0.46521415  0.3300852  0.14455012  0.4027002
## X400m        -0.7016034  0.29017826  0.2835329  0.43082552  0.1039085
## X110m.hurdle -0.7641252 -0.02474081  0.4488873 -0.01689589  0.2242200
# Cos2: calidad en el mapa de factores
head(var$cos2)
##                  Dim.1        Dim.2      Dim.3        Dim.4      Dim.5
## X100m        0.7235641 0.0321836641 0.09093628 0.0011271597 0.03780845
## Long.jump    0.6307229 0.0788806285 0.03630798 0.0133147506 0.05436203
## Shot.put     0.5386279 0.0072938636 0.26790749 0.0165041211 0.06190783
## High.jump    0.3722025 0.2164242070 0.10895622 0.0208947375 0.16216747
## X400m        0.4922473 0.0842034209 0.08039091 0.1856106269 0.01079698
## X110m.hurdle 0.5838873 0.0006121077 0.20149984 0.0002854712 0.05027463
# Contribuciones a los componentes principales
head(var$contrib)
##                  Dim.1      Dim.2     Dim.3       Dim.4     Dim.5
## X100m        17.544293  1.7505098  7.338659  0.13755240  5.389252
## Long.jump    15.293168  4.2904162  2.930094  1.62485936  7.748815
## Shot.put     13.060137  0.3967224 21.620432  2.01407269  8.824401
## High.jump     9.024811 11.7715838  8.792888  2.54987951 23.115504
## X400m        11.935544  4.5799296  6.487636 22.65090599  1.539012
## X110m.hurdle 14.157544  0.0332933 16.261261  0.03483735  7.166193

En esta sección, describimos cómo visualizar las variables y sacar conclusiones sobre sus correlaciones. A continuación, destacamos las variables según i) su calidad de representación en el mapa de factores o ii) sus contribuciones a los componentes principales.

3.4.2.2 Círculo de correlación

La correlación entre una variable y un componente principal (PC) se utiliza como la coor-dinación de la variable en el PC. La representación de las variables difiere del trazado de las observaciones: Las observaciones se representan por sus proyecciones, pero las variables se representan por sus correlaciones (Abdi y Williams,2010).

# Coordenadas de las variables
head(var$coord,4)
##                Dim.1       Dim.2      Dim.3      Dim.4      Dim.5
## X100m     -0.8506257 -0.17939806  0.3015564  0.0335732 -0.1944440
## Long.jump  0.7941806  0.28085695 -0.1905465 -0.1153896  0.2331567
## Shot.put   0.7339127  0.08540412  0.5175978  0.1284684 -0.2488129
## High.jump  0.6100840 -0.46521415  0.3300852  0.1445501  0.4027002

Para trazar variables, se escribe lo siguiente:

fviz_pca_var(res.pca,col.var ="black")

El gráfico anterior también se conoce como gráfico de correlación de variables. Muestra las relaciones entre todas las variables. Se puede interpretar de la siguiente manera. Las variables correlacionadas positivamente se agrupan. Las variables con correlación negativa se sitúan en lados opuestos del origen del gráfico (cuadrantes opuestos). La distancia entre las variables y el origen mide la calidad de las variables en el mapa de factores. Las variables que se alejan del origen están bien representadas en el mapa factorial.

3.4.2.3 Calidad de la representación

La calidad de representación de las variables en el mapa de factores se denominacos2(coseno cuadrado, coordenadas al cuadrado) . Se puede acceder al cos2 de la siguiente manera:

head(var$cos2,4)
##               Dim.1       Dim.2      Dim.3      Dim.4      Dim.5
## X100m     0.7235641 0.032183664 0.09093628 0.00112716 0.03780845
## Long.jump 0.6307229 0.078880629 0.03630798 0.01331475 0.05436203
## Shot.put  0.5386279 0.007293864 0.26790749 0.01650412 0.06190783
## High.jump 0.3722025 0.216424207 0.10895622 0.02089474 0.16216747

Puede visualizar el cos2 de las variables en todas las dimensiones utilizando el paquete corrplot:

library("corrplot")
## corrplot 0.92 loaded
corrplot(var$cos2,is.corr=FALSE)

También se puede crear un gráfico de barras de las variables cos2 mediante la funciónfviz_cos2()[infactoextra]:

# Cos2 total de las variables en Dim.1 y Dim.2
fviz_cos2(res.pca,choice ="var",axes =1:2)

Obsérvese que un cos2 elevado indica una buena representación de la variable en el componente principal. En este caso, la variable se encuentra cerca de la circunferencia del círculo de correlación. Un cos2 bajo indica que la variable no está perfectamente representada por las PC. En este caso, la variable está cerca del centro del círculo. Para una variable dada, la suma de los cos2 en todas las componentes principales es igual a uno. Si una variable está perfectamente representada por sólo dos componentes principales (Dim.1 y Dim.2), la suma de los cos2 en estas dos PC es igual a uno. En este caso, las variables se situarán en el círculo de correlaciones. En este caso, las variables se sitúan dentro del círculo de correlaciones. En resumen: Los valores de cos2 se utilizan para estimar la calidad de la representación. Cuanto más cerca esté una variable del círculo de correlaciones, mejor será su representación en el mapa de factores (y más importante será la interpretación de estos componentes). Las variables que están cerca del centro del gráfico son menos importantes para los primeros componentes. Es posible colorear las variables por sus valores cos2 utilizando el argumentocol.var = “cos2”. Esto produce un gradiente de colores. En este caso, el argumentogradient.cols puede utilizarse para proporcionar un color personalizado. Por ejemplo, gradient.cols = c(“blanco”, “azul”, “rojo”) significa que las variables con valores bajos de cos2 se colorearán en “blanco”, las que tengan valores medios de cos2 se colorearán en “azul y las de valores altos de cos2 se colorearán en rojo.

# Color por valores cos2: calidad en el mapa de factores
fviz_pca_var(res.pca,col.var ="cos2",gradient.cols =c("#00AFBB","#E7B800","#FC4E07"),repel =TRUE)

Tenga en cuenta que, también es posible cambiar la transparencia de las variables de acuerdo a sus valores decos2 utilizando el opcionalpha.var = “cos2”.

# Cambiar la transparencia por valores cos2
fviz_pca_var(res.pca,alpha.var ="cos2")

3.4.2.4 Contribuciones de las variables a los PC

Las contribuciones de las variables para explicar la variabilidad de un determinado componente principal se expresan en porcentaje. Las variables que están correlacionadas con PC1 (es decir, Dim.1) y PC2 (es decir, Dim.2) son las más importantes para explicar la variabilidad del conjunto de datos. Las variables que no se correlacionan con ninguna PC o que se correlacionan con las últimas dimensiones son variables de baja contribución y pueden eliminarse para simplificar el análisis general:

head(var$contrib,4)
##               Dim.1      Dim.2     Dim.3     Dim.4     Dim.5
## X100m     17.544293  1.7505098  7.338659 0.1375524  5.389252
## Long.jump 15.293168  4.2904162  2.930094 1.6248594  7.748815
## Shot.put  13.060137  0.3967224 21.620432 2.0140727  8.824401
## High.jump  9.024811 11.7715838  8.792888 2.5498795 23.115504

Cuanto mayor sea el valor de la contribución, más contribuye la variable al componente. Es posible utilizar la funcióncorrplot() [corrplotpackage] para destacar las variables que más contribuyen a cada dimensión:

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

Cuanto mayor sea el valor de la contribución, más contribuye la variable al componente. Es posible utilizar la funcióncorrplot() [corrplotpackage] para destacar las variables que más contribuyen a cada dimensión:

# Contribuciones de las variables a PC1
fviz_contrib(res.pca,choice ="var",axes =1,top =10)

# Contribuciones de las variables a PC2
fviz_contrib(res.pca,choice ="var",axes =2,top =10)

La contribución total a PC1 y PC2 se obtiene con el siguiente código R:

fviz_contrib(res.pca,choice ="var",axes =1:2,top =10)

La línea roja discontinua del gráfico anterior indica la contribución media esperada. Si la contribución de las variables fuera uniforme, el valor esperado sería 1/longitud(variables) = 1/10 = 10%. Obsérvese que la contribución total de una variable determinada para explicar las varianzas retenidas por dos componentes principales, digamos PC1 y PC2, se calcula como contribución = [(C1 * Eig1)+ (C2 * Eig2)]/(Eig1 + Eig2), donde C1 y C2 son las contribuciones de la variable a PC1 y PC2, respectivamente, y Eig1 y Eig2 son los valores propios de PC1 y PC2, respectivamente. Recordemos que los valores propios miden la cantidad de variación retenida por cada PC. En este caso, la contribución media esperada (corte) se calcula como sigue: Como se ha mencionado anteriormente, si las contribuciones de las 10 variables fueran uniformes, la contribución media esperada en un PC determinado sería 1/10 = 10%. La contribución media esperada de una variable para PC1 y PC2 es [(10* Eig1) + (10 * Eig2)]/(Eig1 + Eig2)Se puede observar que las variables - X100m, salto de longitud y salto con pértiga - son las que más contribuyen a las dimensiones 1 y 2. Las variables más importantes (o que más contribuyen) pueden destacarse en el gráfico de correlación de la siguiente manera:

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

Tenga en cuenta que, también es posible cambiar la transparencia de las variables de acuerdo a sus valores de contrib utilizando el opcionalpha.var = “contrib”.

3.4.2.5 Color por una variable continua personalizada

En las secciones anteriores, mostramos cómo colorear las variables por sus contribuciones y su cos2. Tenga en cuenta que, es posible colorear las variables por cualquier variable continua personalizada.La variable de coloración debe tener la misma longitud que el número de variables activas en el PCA (aquí n = 10). Por ejemplo, escriba esto:

# Crear una variable aleatoria continua de longitud 10 
set.seed(123)
my.cont.var <-rnorm(10)
# Colorear las variables por la variable continua
fviz_pca_var(res.pca,col.var =my.cont.var,
             gradient.cols =c("blue","yellow","red"),
             legend.title ="Cont.Var")

3.4.2.6 Color por grupos

También es posible cambiar el color de las variables por clusters definidos por una variable cualitativa/categórica, también llamada factor en la terminología de R.Como no tenemos ninguna variable de clustering en nuestros conjuntos de datos para clasificar las variables, las crearemos. A continuación, utilizaremos los clusters devueltos por el algoritmo kmeans para colorear las variables.

# Crear una variable de agrupación utilizando kmeans
# Crear 3 grupos de variables (centros = 3)
set.seed(123)
res.km <-kmeans(var$coord,centers =3,nstart =25)
grp <-as.factor(res.km$cluster)
# Variables de color por grupos
fviz_pca_var(res.pca,col.var =grp,
             palette=c("#0073C2FF","#EFC000FF","#868686FF"),
             legend.title ="Cluster")

Tenga en cuenta que, para cambiar el color de los grupos, debe utilizarse el argumentopaletas. Para cambiar los colores de los degradados, se debe utilizar el argumentogradient.cols.

3.4.3 Descripción de la dimensión

En la sección 3.4.2.4, hemos descrito cómo destacar las variables según su contribución a los componentes principales. Esto se puede utilizar de la siguiente manera:

res.desc <-dimdesc(res.pca,axes =c(1,2),proba =0.05)
# Descripción de la dimensión 1
res.desc$Dim.1
## 
## Link between the variable and the continuous variables (R-square)
## =================================================================================
##              correlation      p.value
## Long.jump      0.7941806 6.059893e-06
## Discus         0.7432090 4.842563e-05
## Shot.put       0.7339127 6.723102e-05
## High.jump      0.6100840 1.993677e-03
## Javeline       0.4282266 4.149192e-02
## X400m         -0.7016034 1.910387e-04
## X110m.hurdle  -0.7641252 2.195812e-05
## X100m         -0.8506257 2.727129e-07
# Descripción de la dimensión 2
res.desc$Dim.2
## 
## Link between the variable and the continuous variables (R-square)
## =================================================================================
##            correlation      p.value
## Pole.vault   0.8074511 3.205016e-06
## X1500m       0.7844802 9.384747e-06
## High.jump   -0.4652142 2.529390e-02

En la salida de arriba, $quantime significa los resultados de las variables cuantitativas. Tenga en cuenta que las variables se ordenan por el valor p de la correlación.

3.4.4 Gráfico de individuos

3.4.4.1 Resultados

Los resultados de los individuos pueden extraerse mediante la funciónget_pca_ind() [factoextrapackage]. Al igual que la funciónget_pca_var(), la funciónget_pca_ind() proporciona una lista de matrices que contienen todos los resultados de los individuos (coordenadas, correlación entre variables y ejes, coseno al cuadrado y contribuciones).

ind <-get_pca_ind(res.pca)
ind
## Principal Component Analysis Results for individuals
##  ===================================================
##   Name       Description                       
## 1 "$coord"   "Coordinates for the individuals" 
## 2 "$cos2"    "Cos2 for the individuals"        
## 3 "$contrib" "contributions of the individuals"

Para acceder a los diferentes elementos, utilice esto:

# Coordenadas de los individuos
head(ind$coord)
##                Dim.1      Dim.2      Dim.3       Dim.4       Dim.5
## SEBRLE     0.1955047  1.5890567  0.6424912  0.08389652  1.16829387
## CLAY       0.8078795  2.4748137 -1.3873827  1.29838232 -0.82498206
## BERNARD   -1.3591340  1.6480950  0.2005584 -1.96409420  0.08419345
## YURKOV    -0.8889532 -0.4426067  2.5295843  0.71290837  0.40782264
## ZSIVOCZKY -0.1081216 -2.0688377 -1.3342591 -0.10152796 -0.20145217
## McMULLEN   0.1212195 -1.0139102 -0.8625170  1.34164291  1.62151286
# Calidad de los individuos
head(ind$cos2)
##                 Dim.1      Dim.2       Dim.3       Dim.4        Dim.5
## SEBRLE    0.007530179 0.49747323 0.081325232 0.001386688 0.2689026575
## CLAY      0.048701249 0.45701660 0.143628117 0.125791741 0.0507850580
## BERNARD   0.197199804 0.28996555 0.004294015 0.411819183 0.0007567259
## YURKOV    0.096109800 0.02382571 0.778230322 0.061812637 0.0202279796
## ZSIVOCZKY 0.001574385 0.57641944 0.239754152 0.001388216 0.0054654972
## McMULLEN  0.002175437 0.15219499 0.110137872 0.266486530 0.3892621478
# Contribuciones de los individuos
head(ind$contrib)
##                Dim.1      Dim.2      Dim.3       Dim.4       Dim.5
## SEBRLE    0.04029447  5.9714533  1.4483919  0.03734589  8.45894063
## CLAY      0.68805664 14.4839248  6.7537381  8.94458283  4.21794385
## BERNARD   1.94740183  6.4234107  0.1411345 20.46819433  0.04393073
## YURKOV    0.83308415  0.4632733 22.4517396  2.69663605  1.03075263
## ZSIVOCZKY 0.01232413 10.1217143  6.2464325  0.05469230  0.25151025
## McMULLEN  0.01549089  2.4310854  2.6102794  9.55055888 16.29493304

3.4.4.2 Parcelas: calidad y contribución

La funciónfviz_pca_ind() se utiliza para producir el gráfico de los individuos. Para crear un gráfico simple, escriba esto:

fviz_pca_ind(res.pca)

Al igual que las variables, también es posible colorear a los individuos por sus valores de cos2:

fviz_pca_ind(res.pca,col.ind ="cos2",
             gradient.cols =c("#00AFBB","#E7B800","#FC4E07"),
             repel =TRUE)

Observe que los individuos que son similares se agrupan en el gráfico. También puede cambiar el tamaño del punto según el cos2 de los individuos correspondientes:

fviz_pca_ind(res.pca,pointsize ="cos2",
             pointshape =21,fill ="#E7B800",
             repel =TRUE)

Para cambiar tanto el tamaño del punto como el color por cos2, pruebe esto:

fviz_pca_ind(res.pca,col.ind ="cos2",pointsize ="cos2",
             gradient.cols =c("#00AFBB","#E7B800","#FC4E07"),
             repel =TRUE)

Para crear un gráfico de barras de la calidad de la representación (cos2) de los individuos en el mapa de datos, puede utilizar la funciónfviz_cos2() como se ha descrito anteriormente para las variables:

fviz_cos2(res.pca,choice ="ind")

Para visualizar la contribución de los individuos a los dos primeros componentes principales, escriba esto:

# Contribución total en PC1 y PC2
fviz_contrib(res.pca,choice ="ind",axes =1:2)

3.4.4.3 Color por una variable continua personalizada

En cuanto a las variables, los individuos pueden ser coloreados por cualquier variable continua personalizada especificando el argumentocol.ind. Por ejemplo, escriba esto:

# Crear una variable aleatoria continua de longitud 23,
# La misma longitud que el número de individuos activos en el PCA
set.seed(123)
my.cont.var <-rnorm(23)
# Color variables by the continuous variable
fviz_pca_ind(res.pca,col.ind =my.cont.var,
             gradient.cols =c("blue","yellow","red"),
             legend.title ="Cont.Var")

3.4.4.4 Color por grupos

Aquí describimos cómo colorear individuos por grupos. Además, mostramos cómo añadir elipses de concentración y elipses de confianza por grupos. Para ello, utilizaremos los datos del iris como conjuntos de datos de demostración:

head(iris,3)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa

La columna “Especies” se utilizará como variable de agrupación. Comenzamos calculando el análisis de componentes principales de la siguiente manera:

# Se elimina la variable Especie (index = 5)
# antes del análisis PCA 
iris.pca <-PCA(iris[,-5],graph =FALSE)

En el siguiente código R: el argumentohabillageorcol.ind puede utilizarse para especificar la variable de factor para colorear los individuos por grupos.Para añadir una elipse de concentración alrededor de cada grupo, especifique el argumentoaddEllipses =TRUE. El argumentoopalettes puede utilizarse para cambiar los colores de los grupos.

fviz_pca_ind(iris.pca,
             geom.ind ="point", # show points only (nbut not "text")
             col.ind =iris$Species,# color by groups
             palette =c("#00AFBB","#E7B800","#FC4E07"),
             addEllipses =TRUE,# Concentration ellipses
             legend.title ="Groups")

Tenga en cuenta que, los valores permitidos para la paleta incluyen:-“gris” para paletas de colores grises;-paletas de cerveceros, por ejemplo, “RdBu”, “Blues”, …; Para ver todas, escriba esto en R:RColor-Brewer::display.brewer.all(). -y paletas de revistas científicas del paquete Rggsci, por ejemplo, “npg”, “aaas”, “lancet”, “jco”, “ucscgb”, “uchicago”, “simpsons” y “rickandmorty”:

3.4.5 Personalización de gráficos

Tenga en cuenta que, fviz_pca_ind() yfviz_pca_var() y las funciones relacionadas son una envoltura alrededor de la función principalfviz() [infactoextra].fviz() es una envoltura alrededor de la funciónggscat-ter() [inggpubr]. Por lo tanto, se pueden especificar otros argumentos, que se pasarán a la funciónfviz() yggscatter(), infviz_pca_ind() yfviz_pca_var().Aquí, presentamos algunos de estos argumentos adicionales para personalizar el gráfico PCA de variables e individuos.

3.4.5.1 Dimensiones

Por defecto, las variables/individuos se grafican en las dimensiones 1 y 2. Si desea mostrarlas en las dimensiones 2 y 3, por ejemplo, debe especificar el argumentoxes= c(2, 3).

# Variables en dimensiones 2 y 3
fviz_pca_var(res.pca,axes =c(2,3))

# Individuos en las dimensiones 2 y 3
fviz_pca_ind(res.pca,axes =c(2,3))

3.4.5.2 Elementos de la trama: punto, texto, flecha

El argumento geom(para la geometría) y las derivadas se utilizan para especificar los elementos geométricos o gráficos que se utilizarán para el trazado.1) geom.var: un texto que especifica la geometría que se utilizará para trazar las variables. Los valores permitidos son la combinación de c(“punto”, “flecha”, “texto”). Utilice geom.var = “punto”, para mostrar sólo puntos; Utilice geom.var = “texto”para mostrar sólo etiquetas de texto; Utilice geom.var = c(“punto”, “texto”) para mostrar tanto puntos como etiquetas de texto- Utilice geom.var = c(“flecha”, “texto”) para mostrar flechas y etiquetas (por defecto). Por ejemplo, escriba esto:

# Mostrar puntos variables y etiquetas de texto
fviz_pca_var(res.pca,geom.var =c("point","text"))

geom.ind: un texto que especifica la geometría que se utilizará para trazar los individuos. Los valores siguientes son la combinación de c(“punto”, “texto”). Utilice geom.ind = “punto”, para mostrar sólo puntos; Utilice geom.ind = “texto”para mostrar sólo etiquetas de texto; Utilice geom.ind = c(“punto”, “texto”)para mostrar tanto etiquetas de punto como de texto (por defecto) Por ejemplo, escriba esto:

# Mostrar sólo las etiquetas de texto individuales
fviz_pca_ind(res.pca,geom.ind ="text")

3.4.5.3 Tamaño y forma de los elementos de la parcela

Labelsize: tamaño de la fuente para las etiquetas de texto, por ejemplo:labelsize = 4. Pointsize: el tamaño de los puntos, por ejemplo:pointsize = 1.5. Arrowsize: el tamaño de las flechas. Controla el grosor de las flechas, por ejemplo: arrowsize =0.5. Pointshape: la forma de los puntos,pointshape = 21. Escribee ggpubr::show_point_shapes() para ver las formas de puntos disponibles.

# Cambiar el tamaño de las flechas y las etiquetas
fviz_pca_var(res.pca,arrowsize =1,labelsize =5,
             repel =TRUE)

# Cambiar el tamaño de los puntos, la forma y el color de relleno
# Cambiar el tamaño de las etiquetas
fviz_pca_ind(res.pca,pointsize =3,pointshape =21,fill ="lightblue",
             labelsize =5,repel =TRUE)

3.4.5.4 Elipses

Como hemos descrito en la sección anterior3.4.4.4.4, al colorear individuos por grupos, se pueden añadir elipses de concentración de puntos utilizando el argumento addEllipses = TRUE. Tenga en cuenta que, el argumento ellipse.ty puede utilizarse para cambiar el tipo de elipses. Los valores posibles son: “convexo”: dibuja el casco convexo de un conjunto de puntos. “confianza”: dibuja elipses de confianza alrededor de los puntos medios del grupo como la función coord.ellipse() [en FactoMineR].-“t”: asume una distribución t multivariante. “norma”: asume una distribución normal multivariante. “euclid”: dibuja un círculo con radio igual al nivel, representando la euclídea y la distancia desde el centro. Esta elipse probablemente no aparecerá circular a menos que se aplique ellipse-ord_fixed(). El argumento ellipse.level también está disponible para cambiar el tamaño de la elipse de concentración en probabilidad normal. Por ejemplo, especifique ellipse.level = 0,95 o ellipse.level = 0,66.

# Añadir elipses de confianza
fviz_pca_ind(iris.pca,geom.ind ="point",
             col.ind =iris$Species,# color by groups
             palette =c("#00AFBB","#E7B800","#FC4E07"),
             addEllipses =TRUE,ellipse.type ="confidence",
             legend.title ="Groups")

# Casco convexo
fviz_pca_ind(iris.pca,geom.ind ="point",col.ind =iris$Species,
             palette =c("#00AFBB","#E7B800","#FC4E07"),
             addEllipses =TRUE, ellipse.type ="convex",
             legend.title ="Groups")

3.4.5.5 Puntos medios de los grupos

Al colorear los individuos por grupos (sección3.4.4.4), los puntos medios de los grupos (baricentros) también se muestran por defecto. Para eliminar los puntos medios, utilice el argumentomean.point = FALSE.

fviz_pca_ind(iris.pca,geom.ind ="point", 
             group.ind =iris$Species,
             legend.title ="Groups",
             mean.point =FALSE)

3.4.5.6 Líneas de los ejes

El argumento axes.linety puede utilizarse para especificar el tipo de línea de los ejes. El valor por defecto es “discontinua”. Los valores permitidos son “blanco”, “sólido”, “punteado”, etc. Para ver todos los valores posibles, utilice eggpubr::show_line_types()en R. Para eliminar las líneas de los ejes, utilice axes.linetype = “blank”.

3.4.5.7 Parámetros gráficos

Para cambiar fácilmente el gráfico de cualquier ggplots, puede utilizar la función ggpar()1[ggpubrpackage]Los parámetros gráficos que pueden cambiarse utilizando ggpar() incluyen: Títulos principales, etiquetas de los ejes y títulos de la leyenda-Posición de la leyenda. Valores posibles: “arriba”, “abajo”, “izquierda”, “derecha”, “ninguna”. Paleta de colores. Temas. Los valores permitidos son: theme_gray(), theme_bw(), theme_minimal(),theme_classic(), theme_void().

ind.p <-fviz_pca_ind(iris.pca,geom ="point",col.ind =iris$Species)
ggpubr::ggpar(ind.p,title ="Principal Component Analysis",
              subtitle ="Iris data set",
              caption ="Source: factoextra",
              xlab ="PC1",ylab ="PC2",
              legend.title ="Species",legend.position ="top",
              ggtheme =theme_gray(),palette ="jco")

3.4.6 Biplot

Para hacer un biplot simple de individuos y variables, escriba esto:

fviz_pca_biplot(res.pca,repel =TRUE,
                col.var ="#2E9FDF", # Color de las variables
                col.ind ="#696969" # Color de los individuos
                )

Hay que tener en cuenta que el biplot sólo puede ser útil cuando hay un número reducido de variables e individuos en el conjunto de datos; de lo contrario, el gráfico final sería ilegible. Por lo tanto, en el biplot, debe centrarse principalmente en la dirección de las variables, pero no en sus posiciones absolutas en el gráfico. En términos generales, un biplot puede interpretarse de la siguiente manera: un individuo que está en el mismo lado de una variable dada tiene un valor alto para esta variable; un individuo que está en el lado opuesto de una variable dada tiene un valor bajo para esta variable. Ahora, usando su salida deis.pca, vamos a : hacer un biplot de individuos y variables. cambiar el color de los individuos por grupos: col.ind = iris$Species. mostrar sólo las etiquetas de las variables: label = “var”o usegeom.ind = “point”.

fviz_pca_biplot(iris.pca,
                col.ind =iris$Species,palette ="jco",
                addEllipses =TRUE,label ="var",
                col.var ="black",repel =TRUE,
                legend.title ="Species")

En el siguiente ejemplo, queremos colorear tanto los individuos como las variables por grupos. El truco consiste en utilizar pointshape = 21 para los puntos individuales. Esta forma de punto particular se puede rellenar con un color utilizando el argumentofill.ind. El color de la línea del borde de los puntos individuales se establece en “negro” utilizando col.ind. Para colorear las variables por grupos, se utilizará el argumentocol.var. Para personalizar los colores de los individuos y las variables, se utilizan las funciones de ayudafill_palette()ycolor_palette() [en el paquete ggpubr]

fviz_pca_biplot(iris.pca,
                geom.ind ="point",
                pointshape =21,
                pointsize =2.5,
                fill.ind =iris$Species,
                col.ind ="black",
                col.var =factor(c("sepal","sepal","petal","petal")),
                legend.title =list(fill ="Species",color ="Clusters"),
                repel =TRUE)+
  ggpubr::fill_palette("jco")+ # Color de relleno indiviual
  ggpubr::color_palette("npg") # Colores variables

En el siguiente ejemplo, queremos colorear tanto los individuos como las variables por grupos. El truco consiste en utilizar pointshape = 21 para los puntos individuales. Esta forma de punto particular se puede rellenar con un color utilizando el argumentofill.ind. El color de la línea del borde de los puntos individuales se establece en “negro” utilizandocol.ind. Para colorear las variables por grupos, se utilizará el argumentocol.var. Para personalizar los colores de los individuos y las variables, se utilizan las funciones de ayudafill_palette()ycolor_palette() [en el paquete ggpubr]

fviz_pca_biplot(iris.pca,# Individuos
                geom.ind ="point",
                fill.ind =iris$Species,
                col.ind ="black",pointshape =21,
                pointsize =2,
                palette ="jco",
                addEllipses =TRUE,
                alpha.var ="contrib",
                col.var ="contrib",
                gradient.cols ="RdYlBu",
                legend.title =list(fill ="Species",color ="Contrib",
                                   alpha ="Contrib")
                )

3.5 ELEMENTOS COMPLEMENTARIOS

3.5.1 Definición y tipos

Como se ha descrito anteriormente (apartado 3.3.2), los conjuntos de datos de Decathlon2 contienen variables continuas suplementarias (quanti.sup, columnas 11:12), variables cualitativas suplementarias (quali.sup, columna 13) e individuos suplementarios (ind.sup, filas 24:27). Sus coordenadas se predicen utilizando únicamente la información proporcionada por el análisis de componentes principales realizado sobre las variables/individuos activos

3.5.2 Especificaciones en PCA

Para especificar los sujetos y las variables complementarias, se usa la funciónPCA() de la siguiente forma:

PCA(X,ind.sup =NULL,quanti.sup =NULL,quali.sup =NULL,graph =TRUE)

Donde X es un marco de datos. Las filas son individuos y las columnas son variables numéricas. ind.sup sería un vector numérico que especifica los índices de los individuos suplementarios. quanti.sup,quali.sup es un vector numérico que especifica, respectivamente, los índices de las variables cuantitativas y cualitativas y finalmente graph es un valor lógico. Si es TRUE, se muestra un gráfico. Como ejémplo:

res.pca <-PCA(decathlon2,ind.sup =24:27,
              quanti.sup =11:12,quali.sup =13,graph=FALSE)

3.5.3 Variables cuantitativas

Resultados previstos (coordenadas, correlación y cos2) para las variables cuantitativas suplementarias:

res.pca$quanti.sup
## $coord
##             Dim.1       Dim.2      Dim.3       Dim.4       Dim.5
## Rank   -0.7014777 -0.24519443 -0.1834294  0.05575186 -0.07382647
## Points  0.9637075  0.07768262  0.1580225 -0.16623092 -0.03114711
## 
## $cor
##             Dim.1       Dim.2      Dim.3       Dim.4       Dim.5
## Rank   -0.7014777 -0.24519443 -0.1834294  0.05575186 -0.07382647
## Points  0.9637075  0.07768262  0.1580225 -0.16623092 -0.03114711
## 
## $cos2
##            Dim.1       Dim.2      Dim.3      Dim.4        Dim.5
## Rank   0.4920710 0.060120310 0.03364635 0.00310827 0.0054503477
## Points 0.9287322 0.006034589 0.02497110 0.02763272 0.0009701427

Muestra todas las variables (activas y complementarias):

fviz_pca_var(res.pca)

Por defecto, las variables cuantitativas suplementarias se muestran en color azul y con líneas discontinuas. Otros argumentos para personalizar el gráfico:

# Cambiar el color de las variables
fviz_pca_var(res.pca,col.var ="black",
             col.quanti.sup ="red")

fviz_pca_var(res.pca,invisible ="var") 

fviz_pca_var(res.pca,invisible ="quanti.sup")

# Gráfico de las variables activas
p <-fviz_pca_var(res.pca,invisible ="quanti.sup")

Utilizando la función fviz_pca_var(), las variables cuantitativas suplementarias se muestran automáticamente en el gráfico de círculo de correlación. Tenga en cuenta que puede añadir las variables cuantitativas suplementarias manualmente, y utilizando la función fviz_add(), para una mayor personalización. A continuación, se muestra un ejemplo.

# Añadir variables activas suplementarias
fviz_add(p, res.pca$quanti.sup$coord,
         geom =c("arrow","text"),
         color ="red")

3.5.4 Individuos

res.pca$ind.sup
## $coord
##              Dim.1       Dim.2      Dim.3      Dim.4       Dim.5
## KARPOV   0.7947206  0.77951227 -1.6330203  1.7242283 -0.75070396
## WARNERS -0.3864645 -0.12159237 -1.7387332 -0.7063341 -0.03230011
## Nool    -0.5591306  1.97748871 -0.4830358 -2.2784526 -0.25461493
## Drews   -1.1092038  0.01741477 -3.0488182 -1.5343468 -0.32642192
## 
## $cos2
##              Dim.1        Dim.2      Dim.3      Dim.4        Dim.5
## KARPOV  0.05104677 4.911173e-02 0.21553730 0.24028620 0.0455487744
## WARNERS 0.02422707 2.398250e-03 0.49039677 0.08092862 0.0001692349
## Nool    0.02897149 3.623868e-01 0.02162236 0.48108780 0.0060077529
## Drews   0.09207094 2.269527e-05 0.69560547 0.17617609 0.0079736753
## 
## $dist
##   KARPOV  WARNERS     Nool    Drews 
## 3.517470 2.482899 3.284943 3.655527

Lo anterior fueron resultados previstos para los individuos suplementarios (ind.sup). Ahora, Visualice todos los individuos (activos y suplementarios). En el gráfico, puede añadir también las variables cualitativas suplementarias (quali.sup), cuyas coordenadas son accesibles por medio de res.pca\(quali.supp\)coord. Visualizar todos los individuos (activos y suplementarios). En el gráfico, puede añadir también las variables cualitativas suplementarias (quali.sup), cuyas coordenadas son accesibles mediante res.pca\(quali.supp\)coord.

p <-fviz_pca_ind(res.pca,col.ind.sup ="blue",repel =TRUE)
p <-fviz_add(p, res.pca$quali.sup$coord,color ="red")
p

Los individuos suplementarios se muestran en color azul. Los niveles de la variable cualitativa suplementaria se muestran en color rojo.

3.5.5 Variables cualitativas

En la sección anterior, mostramos que se pueden añadir variables cualitativas suplementarias en el gráfico de individuos utilizando fviz_add(). Esto puede ayudar a interpretar los datos. Los conjuntos de datos de Decathlon 2 contienen una variable cualitativa suplementaria en la columna 13 correspondiente al tipo de competición:

res.pca$quali
## $coord
##              Dim.1      Dim.2       Dim.3      Dim.4      Dim.5
## Decastar -1.343451  0.1218097 -0.03789524  0.1808357  0.1343364
## OlympicG  1.231497 -0.1116589  0.03473730 -0.1657661 -0.1231417
## 
## $cos2
##              Dim.1       Dim.2        Dim.3      Dim.4       Dim.5
## Decastar 0.9051233 0.007440939 0.0007201669 0.01639956 0.009050062
## OlympicG 0.9051233 0.007440939 0.0007201669 0.01639956 0.009050062
## 
## $v.test
##              Dim.1      Dim.2      Dim.3      Dim.4      Dim.5
## Decastar -2.970766  0.4034256 -0.1528767  0.8971036  0.7202457
## OlympicG  2.970766 -0.4034256  0.1528767 -0.8971036 -0.7202457
## 
## $dist
## Decastar OlympicG 
## 1.412108 1.294433 
## 
## $eta2
##                 Dim.1      Dim.2       Dim.3      Dim.4      Dim.5
## Competition 0.4011568 0.00739783 0.001062332 0.03658159 0.02357972

Para colorear a los individuos por una variable cualitativa suplementaria, el argumento habillage se utiliza para especificar el índice de la variable cualitativa suplementaria. Históricamente, el nombre de este argumento proviene del paquete FactoMineR. Se trata de una palabra francesa que significa “dress-ing” en inglés. Para mantener la coherencia entre FactoMineR y factoextra, hemos decidido mantener el mismo nombre de argumento

fviz_pca_ind(res.pca,habillage =13,
             addEllipses =TRUE,ellipse.type ="confidence",
             palette ="jco",repel =TRUE)

3.6 Filtrar resultados

Si tiene muchos individuos/variables, es posible mostrar sólo algunos de ellos utilizando los argumentos select.ind y select.var.select.ind. select.var corresponde a una selección de individuos/variables a trazar. Los valores permitidos sonNULL o alist con los argumentos nombre, cos2 o contrib. nombre es un vector de caracteres que contiene los nombres de los individuos/variables a trazar-cos2: si cos2 está en [0, 1], por ejemplo 0,6, se trazan los individuos/variables con un cos2 > 0. 6. Si cos2 > 1, por ejemplo 5, se trazan los 5 individuos/variables más activos y las 5 columnas/filas suplementarias con el mayor cos2-contrib: si contrib > 1, por ejemplo 5, se trazan los 5 individuos/variables con las mayores contribuciones.

# Visualizar la variable con cos2 >= 0.6
fviz_pca_var(res.pca,select.var =list(cos2 =0.6))

# Las 5 variables activas con mayor cos2
fviz_pca_var(res.pca,select.var=list(cos2 =5))

# Seleccionar por nombres
name <-list(name =c("Long.jump","High.jump","X100m"))
fviz_pca_var(res.pca,select.var =name)

# los 5 individuos que más contribuyen y la variable
fviz_pca_biplot(res.pca,select.ind =list(contrib =5),
select.var =list(contrib =5),
ggtheme =theme_minimal())

Cuando la selección se realiza según los valores de contribución, los individuos/variables suplementarias no se muestran porque no contribuyen a la construcción de los ejes.

3.7 Exportación de resultados

3.7.1 Exportar gráficos a archivos PDF/PNG

El paquete de exportación de datos produce gráficos basados en ggplot2. Para guardar cualquier ggplot, el código estándar de R es el siguiente:

pdf(“myplot.pdf”) print(myplot)dev.off()

En los próximos ejemplos, le mostraremos cómo guardar los diferentes gráficos en archivos pdf o png. El principio es la creación de los diagramas que quiere como un objeto de R:

# Scree plot
scree.plot <-fviz_eig(res.pca)
# Parcela de individuos
ind.plot <-fviz_pca_ind(res.pca)
# Parcela de variables
var.plot <-fviz_pca_var(res.pca)

A continuación, las parcelas se pueden exportar a un único archivo pdf como se indica:

pdf("PCA.pdf")# Crear un nuevo dispositivo pdf
print(scree.plot)
print(ind.plot)
print(var.plot)
dev.off() # Cerrar el dispositivo pdf
## png 
##   2

Tenga en consideración que, utilizando el código R anterior, se creará el archivo PDF en su directorio de trabajo actual. Para ver la ruta de su directorio de trabajo actual, escriba egetwd()en la consola de R. Para imprimir cada gráfico en un archivo png específico, el código de R es el siguiente:

# Imprimir el diagrama de dispersión en un archivo png
png("pca-scree-plot.png")
print(scree.plot)
dev.off()
## png 
##   2
# Imprimir la parcela de los individuos en un archivo png
png("pca-variables.png")
print(var.plot)
dev.off()
## png 
##   2
# Imprimir el gráfico de las variables en un archivo png
png("pca-individuals.png")
print(ind.plot)
dev.off()
## png 
##   2

Otra alternativa, para exportar ggplots, es utilizar la función ggexport() [en ggpubrpackage]. Nos encanta ggexport(), porque es muy simple. Con una línea de código R, nos permite exportar parcelas individuales a un archivo (pdf, eps o png) (una parcela por la página). También puede organizar los gráficos (2 gráficos por página, por ejemplo) antes de exportarlos. Los ejemplos siguientes muestran cómo exportar ggplots utilizando ggexport(). Exporta gráficos individuales a un archivo pdf (un gráfico por página):

library(ggpubr)

#Exportar parcelas individuales a un archivo pdf (una parcela por página):
ggexport(plotlist =list(scree.plot, ind.plot, var.plot),
         filename ="PCA.pdf")
## file saved to PCA.pdf
#Organizar y exportar. Especifique nrow y ncol para mostrar múltiples gráficos en la misma página:
  ggexport(plotlist =list(scree.plot, ind.plot, var.plot),nrow =2,ncol =2,filename ="PCA.pdf")
## file saved to PCA.pdf
#Exportación de gráficos a archivos png. Si especifica una lista de gráficos, se crearán automáticamente varios archivos png para cada gráfico.
  ggexport(plotlist =list(scree.plot, ind.plot, var.plot),filename ="PCA.png")
## [1] "PCA%03d.png"
## file saved to PCA%03d.png

3.7.2 Exportar los resultados a archivos txt o csv

Todos los resultados del PCA (coordenadas de los individuos/variables, contribuciones, etc.) pueden ser exportados de una vez, a un archivo TXT/CSV, utilizando la funciónwrite.infile() [inFactoMineR]del paquete:

# Exportar a un archivo TXT
write.infile(res.pca,"pca.txt",sep ="\t")
# Exportar a un archivo CSV
write.infile(res.pca,"pca.csv",sep =";")

3.8 Resumen

En conclusión, describimos cómo realizar e interpretar el análisis de componentes principales (PCA). Calculamos el PCA utilizando la funciónPCA() [FactoMineR]. A continuación, utilizamos el paquete FactoextraR para producir una visualización basada en ggplot2 de los resultados del PCA:

  1. Utilizando prcomp() [stats]
res.pca <-prcomp(iris[, -5],scale. =TRUE)
  1. Usando princomp() [stats]
res.pca <-princomp(iris[, -5],cor =TRUE)
  1. Al usar dudi.pca() [ade4]
library("ade4")
## 
## Attaching package: 'ade4'
## The following object is masked from 'package:FactoMineR':
## 
##     reconst
res.pca <-dudi.pca(iris[, -5],
                                  scannf =FALSE,nf =5)
  1. Al utilizar epPCA() [ExPosition]
library("ExPosition")
## Loading required package: prettyGraphs
res.pca <-epPCA(iris[, -5],
                                     graph =FALSE)

Sin importar las funciones que elijas usar, en la lista anterior, el paquete factoextra puede manejar la salida para crear hermosos gráficos similares a los que se describieron en las discusiones anteriores para FactoMineR:

fviz_eig(res.pca)# Scree plot

fviz_pca_ind(res.pca) # Gráfico de individuos

fviz_pca_var(res.pca) # Gráfico de variables

3.9 OTRAS LECTURAS

Principal component analysis (article) (Abdi and Williams,2010). https://goo.gl/1Vtwq1.

Principal Component Analysis Course Using FactoMineR (Video courses). https://goo.gl/VZJsnM

Exploratory Multivariate Analysis by Example Using R (book) (Husson et al.,2017b).

Principal Component Analysis (book) (Jollife,2002).

Ver también

PCA usingprcomp() andprincomp() (tutorial). http://www.sthda.com/english/wiki/pca-using-prcomp-and-princomp

PCA usingade4andfactoextra(tutorial). http://www.sthda.com/english/wiki/pca-using-ade4-and-factoextra