Analisis de componentes principales

1. Introducción

Este analisis de componentes principales, nos permite resumir y ver la información de cualquier conjunto de datos que contenga observaciones descritas por multiples variables cuantitativas. Cada una de las variables puede considerarse como diferente, pero si tiene más de 3 variables en el conjunto de datos es dificil visualizar un hiperespacio multidimensional.

El PCA (Principal component analysis) se utiliza para extraer información de tablas de datos multivariantes y expresar esta referencia como un conjunto de multiples variables nuevas, llamadas componentes principales. Estas nuevas variables corresponden a combinaciones lineales de las variables originales. El número de componentes principales es inferior o igual al número de variables originales.

La información del conjunto de datos corresponde al grado de variabilidad que tiene. El objetivo del ACP es identificar las direcciones (o componentes principales) a lo largo de las cuales la variación de los datos es máxima. En otras palabras, el ACP reduce la dimensionalidad de los datos multivariados a dos o tres componentes principales, que pueden visualizarse gráficamente, con una pérdida mínima de información.

En este capítulo, se describe la idea básica del PCA y se demuestra cómo calcular y visualizar el PCA utilizando de software R. Además, se muestra cómo revelar las variables más importantes que explican las variaciones en un conjunto de datos.

2. Bases

La comprensión de los detalles del PCA requiere conocimientos de álgebra lineal. En el gráfico 1A que aparece a continuación, 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. El analisis de componentes principales asume que las direcciones con las mayores varianzas son las más “importantes”.

figura 1

En teoria, la cantidad de varianza retenida por cada componente principal se mide por los llamados valores propios. Tenga en cuenta que el método PCA es especialmente útil cuando las variables del conjunto de datos están muy correlacionadas. La correlación indica que hay redundancia en los datos. Debido a esta redundancia, el ACP 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

El objetivo principal del análisis de componentes principales es:
- Identificar patrones ocultos en un conjunto de datos
- Reducir la dimensionalidad de los datos eliminando el ruido y la incertidumbre de los datos
- Identificar las variables correlacionadas

3. Computación

R packages

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

- 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 factoextra

Utilizaremos los dos paquetes FactoMineR (para el análisis) y factoextra (forggplot2-based visualization).

Se instalan los dos paquetes como se muestra a continuación:

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

Se cargan 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

Data format

Se utilizan los conjuntos de datos de demostración decathlon2 del paquete factoextra:

data(decathlon2)
head(decathlon2)
##           X100m Long.jump Shot.put High.jump X400m X110m.hurdle Discus
## SEBRLE    11.04      7.58    14.83      2.07 49.81        14.69  43.75
## CLAY      10.76      7.40    14.26      1.86 49.37        14.05  50.72
## BERNARD   11.02      7.23    14.25      1.92 48.93        14.99  40.87
## YURKOV    11.34      7.09    15.19      2.10 50.42        15.31  46.26
## ZSIVOCZKY 11.13      7.30    13.48      2.01 48.62        14.17  45.67
## McMULLEN  10.83      7.31    13.76      2.13 49.91        14.38  44.41
##           Pole.vault Javeline X1500m Rank Points Competition
## SEBRLE          5.02    63.19  291.7    1   8217    Decastar
## CLAY            4.92    60.15  301.5    2   8122    Decastar
## BERNARD         5.32    62.77  280.1    4   8067    Decastar
## YURKOV          4.72    63.44  276.4    5   8036    Decastar
## ZSIVOCZKY       4.42    55.37  268.0    7   8004    Decastar
## McMULLEN        4.42    56.37  285.1    8   7995    Decastar

Como se ilustra en la figura 3.1, los datos que se utilizan aquí describen el rendimiento de los atletas durante dos pruebas deportivas. Contiene 27 individuos (atletas) descritos por 13 variables.

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

- Las 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): Columnas 11 y 12 que corresponden respectivamente al rango y a los puntos de los atletas.-Variables cualitativas suplementarias(verde): Columna 13 correspondiente a los dos encuentros atléticos (Juego Olímpico 2004 o Decastar 2004).Se trata de un factor de variable categórica (o factor). Puede utilizarse para colorear a los individuos por grupos.

Se comienza 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

Estandarización de datos

En el análisis de componentes principales, las variables a menudo se estandarizan. Esto es recomendable cuando las variables se miden en diferentes escalas (por ejemplo: kilogramos, kilómetros, centímetros); de lo contrario, los resultados del ACP obtenidos se verán gravemente afectados.

El objetivo es que las variables sean comparables. Por lo general, las variables se estandarizan para que tengan:
i)desviación estándar uno
ii) media cero.

La estandarización de los datos es un enfoque que se utiliza en el contexto del análisis de datos de expresión génica antes del PCA y del análisis de clustering. También podemos querer estandarizar los datos cuando la media y/o la desviación estándar de las variables son muy diferentes.

Cuando se estandariza la variable se utiliza esta formula:

\[ \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).

Hay que tener en cuenta que la función PCA() [inFactoMineR], normaliza los datos automáticamente durante el PCA; así que no es necesario hacer esta transformación antes del PCA.

R code

Se puede utilizar la función PCA() [FactoMineRpackage] Un formato simplificado es: PCA(X,scale.unit =TRUE,ncp =5,graph =TRUE)

- X: un marco de datos. Las filas son individuos y las columnas son variables numéricas - scale.unit: un valor lógico. If TRUE, los datos se estandarizan a la unidad de varianza antes del análisis. Esta estandarización a la misma escala evita que algunas variables se vuelvan dominantes sólo por sus grandes unidades de medida. - ncp: número de dimensiones que se mantienen en los resultados finales. -Graph: un valor lógico. If TRUE se muestra un gráfico.

El código R que aparece a continuación, 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 :

library("FactoMineR")
res.pca <-PCA(decathlon2.active,graph =FALSE)
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 listas y matrices diferentes. Estos valores se describen en la siguiente sección.

* 4. Interpretación y vizualización*

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

Estas funciones incluyen:

- get_eigenvalue(res.pca): Extrae los valores propios/varianzas de los componentes principales
- fviz_eig(res.pca): Visualiza los eigenvalues
- get_pca_ind(res.pca), get_pca_var(res.pca):Extrae los resultados de los individuales y de las variables, respectivamente.
- fviz_pca_ind(res.pca), fviz_pca_var(res.pca):Visualiza los resultados individuales y variables, respectivamente.
- fviz_pca_biplot(res.pca):Se realiza un biplot de individuos y variables.

Enigenvalues y desviaciones

Como se ha visto en las secciones anteriores, los valores propios miden la cantidad de variación retenida por cada componente principal. Los valores propios son grandes para los primeros PC y pequeños para los siguientes, es decir, los primeros PC corresponden a las direcciones con la mayor cantidad de variación en el conjunto de datos.

Examinamos los valores propios para determinar el número de componentes principales que hay que considerar. Los valores propios y la proporción de varianzas retenidas por los componentes principales (PC) pueden extraerse utilizando la función get_eigenvalue()[ factoextra package].

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

La suma de todos los valores propios da una varianza total de 10.

La proporción de la variación explicada por cada valor propio se indica en la segunda columna. 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 acumulativo 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.

En nuestro análisis, los tres primeros componentes principales explican el 72% de la variación. Se trata de un porcentaje aceptablemente grande. Un método alternativo para determinar el número de componentes principales es observar un 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)).

El scree plot puede desarrollarse usando la función fviz_eig() orfviz_screeplot() [ factoextra package].

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

A partir del gráfico anterior, podemos decir que en el quinto componente principal el 87% de la información (varianzas) contenida en los datos es retenida por los cinco primeros componentes principales.

Grafico de variables

Resultados

Un método sencillo para extraer los resultados, para las variables, de una salida PCA es utilizar la función get_pca_var() [ factoextra package]. Esta función proporciona una lista de matrices que contienen 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 theget_pca_var() pueden utilizarse en el plot de las variables como:

  • 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. 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 del principio. La contribución de una variable (var) a un componente principal determinado es (en porcentaje): (var.cos2 * 100) / (cos2 total del componente).

Se puede acceder a los diferentes componentes de la siguiente manera:

# coordinates
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: quality on the factore map
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
# Contributions to the principal components
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

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.

Circulo de correlacion

La correlación entre una variable y un componente principal 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).

# coordinates 
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 que se muestren las variables plot, hayq ue escribir esto:

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 como sigue:

  • Las variables correlacionadas positivas se agrupan.
  • Las variables con correlación negativa se colocan 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.

Calidad de la representación

La calidad de la representación de las variables en el mapa de factores se llama cos2 (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

Se 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)

Tambien es posible crear un grafico de barras del cos2 mediante esta funcion: fviz_cos2()[infactoextra]:

# Total cos2 of variables on Dim.1 and Dim.2
fviz_cos2(res.pca,choice ="var",axes =1:2)

Hay que tener en cuenta que: -Un cos2 alto indica una buena representación de la variable en el componente principal. -Un cos2 bajo indica que la variable no está perfectamente representada por los PCs, en este caso la variable está cerca del centro del círculo.

En resumen:
-Los valores 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.

Tambien se pueden colorear las variables por sus valores cos2 utilizando el argumento col.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 variables con valores medios de cos2 se colorearán en “azul”.
-las variables con valores de cos2 altos se colorearán en rojo

# Color by cos2 values: quality on the factor map
fviz_pca_var(res.pca,col.var ="cos2",
             gradient.cols =c("#00AFBB","#E7B800","#FC4E07"),
             repel =TRUE # Avoid text overlapping
             )

Tenga en cuenta que, también es posible cambiar la transparencia de las variables de acuerdo a sus valores decos2 utilizando el opcion alpha.var = “cos2”. Se utiliza esta función:

# Change the transparency by cos2 values
fviz_pca_var(res.pca,alpha.var ="cos2")

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 correlacionadas con Dim.1 y Dim.2 son las más importantes para explicar la variabilidad del conjunto de datos.

La contribución de las variables puede extraerse como:

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ón corrplot() [corrplotpackage] para destacar las variables que más contribuyen a cada dimensión:

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

La función fviz_contrib() [paquete factoextra] puede utilizarse para dibujar un gráfico de barras de las contribuciones de las variables y se puede decidir cuales son las que mas contribuyen si el codigo tiene muchas. El código R siguiente muestra las 10 principales variables que contribuyen a los componentes principales:

# Contributions of variables to PC1
fviz_contrib(res.pca,choice ="var",axes =1,top =10)

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

La línea roja 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%. Para un componente determinado, una variable con una contribución superior a este límite podría considerarse importante en la contribución al componente.

Para hallar la contribución total de PC1 Y PC2 se utiliza este codigo:

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

Las variables más importantes (o que contribuyen) pueden destacarse en el gráfico de correlación como sigue:

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


Al igual que con el otro grafico tambien es posible cambiar la transparencia de las variables en función de sus valores de contribucion utilizando el opcion alpha.var = “contrib” mediante esta funcion:

# Cambiar la transparencia 
fviz_pca_var(res.pca,alpha.var ="contrib")

Color por una 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:

# Crear una variable continua aleatoria 
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")

Color por grupos

También es posible cambiar el color de las variables por grupos definidos por una variable cualitativa/categórica, también llamada factor en la terminología de R. Como no tenemos ninguna variable de agrupación en nuestros conjuntos de datos para clasificar las variables, la crearemos.

En el siguiente ejemplo, comenzamos por clasificar las variables en 3 grupos utilizando el algoritmo de agrupación de kmeans.

 #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 grupo
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 argumentopalettes. Para cambiar los colores de los degradados, debe utilizarse el argumentogradient.cols.

Descripción de la dimensión

La función dimdesc() [en FactoMineR], para la descripción de la dimensión, puede utilizarse para identificar las variables más significativamente asociadas con un determinado componente principal. Se puede utilizar como sigue:

res.desc <-dimdesc(res.pca,axes =c(1,2),proba =0.05)
# Descripcion de la dimension 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
# Descripcion de la dimension 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 anterior, $quantimeans resultados para las variables cuantitativas. Tenga en cuenta que las variables se ordenan por el valor p de la correlación.

Grafico de individuos

Resultados

Los resultados de los individuos pueden extraerse mediante la función get_pca_ind() [_factoextra_package]. Al igual que la función get_pca_var(), la función get_pca_ind() proporciona una lista de matrices que contienen todos los resultados de los individuos (coordenadas, correlación entre variables y ejes, coseno 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"
# 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 particulares
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

Plots: calidad y contribución

La función fviz_pca_ind() se utiliza para producir el gráfico de los individuos. Para crear un gráfico simple se usa esta función:

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# Avoid text overlapping (slow if many points)
             )

También se 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 crear un gráfico de barras de la calidad de la representación (cos2) de los individuos en el mapa de datos, se puede utilizar la funciónfviz_cos2():

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

Para visualizar la contribución de los individuos a los dos primeros componentes principales.

fviz_contrib(res.pca,choice ="ind",axes =1:2)

Color por una variable continua personalizada

En cuanto a las variables, los individuos pueden ser coloreados por cualquier variable continua personalizada especificando el argumento col.ind.

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

Color por grupos

Aquí se demuestra cómo colorear a los individuos por grupo. 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.Los conjuntos de datos del iris tienen este aspecto:

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 como sigue:

iris.pca <-PCA(iris[,-5],graph =FALSE)

En el código R que se muestra a continuación: el argumento habillage or col.ind puede utilizarse para especificar el factorvariable para colorear los individuos por grupos.Para añadir una elipse de concentración alrededor de cada grupo, especifique el argumentoaddEllipses =TRUE. El argumentopaletaspuede utilizarse para cambiar los colores de los grupos.

fviz_pca_ind(iris.pca,
             geom.ind ="point",
             col.ind =iris$Species,
             palette =c("#00AFBB","#E7B800","#FC4E07"),
             addEllipses =TRUE,
             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 verlas todas, escriba esto en R:RColor-Brewer::display.brewer.all().
-paleta de colores personalizada, por ejemplo, c(“azul”, “rojo”);
-y paletas de revistas científicas del paquete Rggsci, por ejemplo “npg”, “aaas”, “lancet”, “jco”, “ucscgb”, “uchicago”, “simpsons” y “rickandmorty”.

Por ejemplo, para utilizar la paleta de colores de jco (journal of clinical oncology) se escribe esto:

fviz_pca_ind(iris.pca,
             label ="none",
             habillage =iris$Species,
             addEllipses =TRUE,
             palette ="jco")

Personalizacion de graficos

Tenga en cuenta que, fviz_pca_ind() y fviz_pca_var() y las funciones relacionadas son una envoltura alrededor de la función principal fviz() [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() y fviz_pca_var().

Dimensiones

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

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

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

Elementos del plot: punto, texto, arrow

El argumento geom y las derivadas se utilizan para especificar los elementos de geometría o los elementos 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”, “arrow”, “texto”). -Usegeom.var = “punto”, para mostrar sólo puntos; -Usegeom.var = “text”para mostrar sólo etiquetas de texto; -Usegeom.var = c(“punto”, “texto”)para mostrar tanto puntos como etiquetas de texto -Usegeom.var = c(“arrow”, “texto”)para mostrar flechas y etiquetas (por defecto)

Por ejemplo, se escribe esto:

# Se muestran solo las variables individuales
fviz_pca_var(res.pca,geom.var =c("point","text"))

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

Por ejemplo, se escribe esto:

# Se muestran solo las variables individuales 
fviz_pca_ind(res.pca,geom.ind ="text")

Tamaño y forma de los elementos del plot

1.labelsize: tamaño de la fuente para las etiquetas de texto, por ejemplo:labelsize = 4 2.pointsize: el tamaño de los puntos, por ejemplo:pointsize = 1.5. 3.arrowsize: el tamaño de las flechas. Controla el grosor de las flechas, por ejemplo: arrowsize =0.5} 4. pointshape: la forma de los puntos,pointshape = 21. Escriba ggpubr::show_point_shapes() para ver las formas de puntos disponibles.

# Cambiar el tamaño de las arrow 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)

Elipses

Como se ha dicho en el apartado anterior, 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 argumentoellipse.typuede utilizarse para cambiar el tipo de elipses. Los valores posibles son:

-“convexo”: traza el casco convexo de un conjunto de puntos.
-“Confianza”: traza elipses de confianza alrededor de los puntos de la media del grupo como la funcióncoord.ellipse()[en FactoMineR].
-“t”: asume una distribución t multivariante.
- “norm”: asume una distribución normal multivariante.
- “euclides”: dibuja un círculo con el radio igual al nivel, representando El argumento ellipse.level también está disponible para cambiar el tamaño de la elipse de concentración en la probabilidad normal. Por ejemplo, especifique ellipse.level = 0,95 o ellipse.level = 0,66.

# Se añaden las elipses de confianza 

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

# Convex hull
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"
             )

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)

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”:

fviz_pca_var(res.pca,axes.linetype ="blank")

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

Biplot

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

fviz_pca_biplot(res.pca,repel =TRUE,
                col.var ="#2E9FDF",
                col.ind ="#696969"
                )

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” 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,
                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")+
  ggpubr::color_palette("npg")

Otro ejemplo complejo es colorear los individuos por grupos (color discreto) y las variables por sus contribuciones a los componentes principales (colores de gradiente). Además, cambiaremos la transparencia de las variables por sus contribuciones utilizando el argumento alpha.var.

fviz_pca_biplot(iris.pca,
                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"))

### 5. Elementos complementarios

Definición y tipos

Como se ha descrito anteriormente, 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.

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)

Variables cuantitativas

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

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:

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

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.

p <-fviz_pca_var(res.pca,invisible ="quanti.sup")
fviz_add(p, res.pca$quanti.sup$coord,
         geom =c("arrow","text"),
         color ="red")

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.

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)


### * 6. Filtrado de 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.

fviz_pca_var(res.pca,select.var =list(cos2 =0.6))

fviz_pca_var(res.pca,select.var=list(cos2 =5))

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

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.

7. Exportacion de resultados

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:

Imprime el gráfico en un archivo pdf
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:

# Grafico scree
scree.plot <-fviz_eig(res.pca)

# Grafico de indivuduales
ind.plot <-fviz_pca_ind(res.pca)

# Grafico 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 a continuación:

pdf("PCA.pdf") # crear un nuevo dispositivo pdf
print(scree.plot)
print(ind.plot)
print(var.plot)
dev.off()# Cerramos tel 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:

# Se imprime un grafico plot a un archivo png
png("pca-scree-plot.png")
print(scree.plot)
dev.off()
## png 
##   2
# Se imprimen los graficos individuales a un archivo png
png("pca-variables.png")
print(var.plot)
dev.off()
## png 
##   2
# Se imprimen los graficos de variables a 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)
ggexport(plotlist =list(scree.plot, ind.plot, var.plot),
         filename ="PCA.pdf")
## file saved to PCA.pdf

Se organiza y exporta. Especifique nrow y ncol para mostrar varios 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

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:

# Archivo TXT
write.infile(res.pca,"pca.txt",sep ="\t")

# Archivo CSV
write.infile(res.pca,"pca.csv",sep =";")

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)Usingprcomp() [stats]

res.pca <-prcomp(iris[, -5],scale. =TRUE)

2)Usingprincomp() [stats]

res.pca <-princomp(iris[, -5],cor =TRUE)

3)Usingdudi.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)

4)UsingepPCA() [ExPosition]

library("ExPosition")
## Loading required package: prettyGraphs
res.pca <-epPCA(iris[, -5],graph =FALSE)

Sin importar las funciones que se elijan 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)

fviz_pca_ind(res.pca)

fviz_pca_var(res.pca)