Introducción

BASICS

Computation

3.3.1 R packages

  • En este paso tenemos que instalar la paqueteria de “ggplot2”,“FactoMineR” y “factoextra”. posteriormente a la instalacion de estos paquetes, vamos a llamar las librerias.
library("FactoMineR")
## Warning: package 'FactoMineR' was built under R version 4.1.3
library("factoextra")
## Warning: package 'factoextra' was built under R version 4.1.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.1.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa

3.3.2 Data format

  • Utilizaremos los conjuntos de datos de demostración decathlon2 del paquete factoextra:
data(decathlon2)
# head(decathlon2)
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
  • Los datos utilizados aquí describen el rendimiento de los atletas durante dos eventos deportivos (Desctar y OlympicG). Contiene 27 individuos (atletas) descritos por 13 variables.

3.3.3 Data standardization

xi − mean(x) sd(x)

  • Donde mean(x) es la media de los valores de x, y sd(x) es la desviación estándar (SD). La función base de R scale() puede utilizarse para estandarizar los datos. Toma una matriz numérica como entrada y realiza el escalado en las columnas.

3.3.4 R code

  • El código R que aparece a continuación, calcula el análisis de componentes principales en los individuos/varios 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"

3.4 Visualization and Interpretation

fviz_pca_var(res.pca)

3.4.1 Eigenvalues / Variances

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
  • El porcentaje acumulado explicado se obtiene sumando las proporciones sucesivas de la variación explicada para obtener el total acumulado, En el caso de 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. Los valores propios pueden utilizarse para determinar el número de componentes principales que deben conservarse después de PCA (Kaiser, 1961).

Ahora utilizaremos 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, más allá del cual los restantes valores propios son todos relativamente pequeños y de tamaño comparable (Jollife, 2002, Peres-Neto et al. (2005)).

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

3.4.2 Graph of variables

3.4.2.1 Results

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"
  • 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 al cuadrado y contribuciones).
# 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
  • “var$coord”: coordenadas de las variables para crear un gráfico de dispersión
# 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
  • “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
# 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
  • 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).

3.4.2.2 Correlation circle

# Coordinates of 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
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:
  1. Las variables correlacionadas positivamente se agrupan.

  2. Las variables con correlación negativa se sitúan en lados opuestos del origen del gráfico (cuadrantes opuestos).

  3. 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 de factores.

3.4.2.3 Quality of representation
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")
## Warning: package 'corrplot' was built under R version 4.1.3
## corrplot 0.92 loaded
corrplot(var$cos2, is.corr=FALSE)

También es posible crear un gráfico de barras de las variables cos2 utilizando la función fviz_cos2()[en ***factoextra]***:

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

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

  1. Los valores cos2 se utilizan para estimar la calidad de la representación.

  2. 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 es la interpretación de estos componentes).

  3. Las variables que están cerca del centro del gráfico son menos importantes para los primeros componentes.

3.4.2.4 Contributions of variables to PCs

  • La contribución de las variables puede extraerse como sigue:
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
  • Es posible utilizar la función corrplot() [paquete corrplot] 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 . Si sus datos contienen muchas variables, puede decidir mostrar sólo las principales variables que más contribuyen. 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 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)

  • Obsérvese que, la contribución total de una variable dada, al explicar las variaciones retenidas por dos componentes principales, digamos PC1 y PC2, se calcula como contrib = [(C1 * Eig1) + (C2 * Eig2)]/(Eig1 + Eig2), donde (1)C1 y C2 son las contribuciones de la variable en PC1 y PC2, respectivamente (2)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.

  • Las variables más importantes (o que contribuyen) se pueden destacar en el gráfico de correlación de correlación como se indica a continuación:

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

3.4.2.5 Color by a custom continuous variable

  • 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
# Create a random continuous variable of length 10
set.seed(123)
my.cont.var <- rnorm(10)
# Color variables by the continuous variable
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 by groups

  • 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. En el siguiente ejemplo de demostración, comenzamos clasificando las variables en 3 grupos utilizando el algoritmo de clustering kmeans. A continuación, utilizamos los clusters devueltos por el algoritmo kmeans para colorear las variables.
# Create a grouping variable using kmeans
# Create 3 groups of variables (centers = 3)
set.seed(123)
res.km <- kmeans(var$coord, centers = 3, nstart = 25)
grp <- as.factor(res.km$cluster)
# Color variables by groups
fviz_pca_var(res.pca, col.var = grp,
palette = c("#0073C2FF", "#EFC000FF", "#868686FF"),
legend.title = "Cluster")

3.4.3 Dimension description

res.desc <- dimdesc(res.pca, axes = c(1,2), proba = 0.05)
# Description of 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
# Description of 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

3.4.4 Graph of individuals

3.4.4.1 Results

  • 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"
  • Para acceder a los diferentes componentes, utilice esto:
# Coordinates of individuals
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
# Quality of individuals
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
# Contributions of individuals
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 Plots: quality and contribution

  • La función fviz_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 # Avoid text overlapping (slow if many points)
)

  • También puedes 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 # Avoid text overlapping (slow if many points)
)

  • Para crear un gráfico de barras de la calidad de representación (cos2) de los individuos en el mapa de factores puede utilizar la función fviz_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:
# Total contribution on PC1 and PC2
fviz_contrib(res.pca, choice = "ind", axes = 1:2)

3.4.4.3 Color by a custom continuous variable

  • En cuanto a las variables, los individuos pueden ser coloreados por cualquier variable continua personalizada especificando el argumento col.ind. Por ejemplo, escriba esto
# Create a random continuous variable of length 23,
# Same length as the number of active individuals in the 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 by groups

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 por calcular el análisis de componentes principales como se indica a continuación:
# The variable Species (index = 5) is removed
# before PCA analysis
iris.pca <- PCA(iris[,-5], graph = FALSE)
  • El argumento habillage o col.ind se puede utilizar para especificar el factor para colorear los individuos por 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"
)

# Add confidence ellipses
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"
)

3.4.5 Graph customization

3.4.5.1 Dimensions

  • Por defecto, las variables/individuos se representan en las dimensiones 1 y 2. Si desea visualizarlas en las dimensiones 2 y 3, por ejemplo, debe especificar el argumento ejes = c(2, 3)
# Variables on dimensions 2 and 3
fviz_pca_var(res.pca, axes = c(2, 3))

# Individuals on dimensions 2 and 3
fviz_pca_ind(res.pca, axes = c(2, 3))

3.4.5.2 Plot elements: point, text, arrow

  • geom.var: un texto que especifica la geometría que se utilizará para trazar las variables.
# Show variable points and text labels
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.
# Show individuals text labels only
fviz_pca_ind(res.pca, geom.ind = "text")

3.4.5.3 Size and shape of plot elements

  1. labelsize: el 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.
# Change the size of arrows an labels
fviz_pca_var(res.pca, arrowsize = 1, labelsize = 5,
repel = TRUE)

# Change points size, shape and fill color
# Change labelsize
fviz_pca_ind(res.pca,
pointsize = 3, pointshape = 21, fill = "lightblue",
labelsize = 5, repel = TRUE)

3.4.5.4 Ellipses

  • Como hemos descrito en el apartado anterior 3.4.4.4, al colorear individuos por grupos, se pueden añadir elipses de concentración de puntos utilizando el argumento addEllipses = TRUE.

  • El argumento ellipse.level también está disponible para cambiar el tamaño de la elipse de concentración en probabilidad normal.

# Add confidence ellipses
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"
)

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

3.4.5.5 Group mean points

  • Al colorear individuos por grupos (sección 3.4.4.4), los puntos medios de los grupos (baricentros) también se muestran por defecto. Para eliminar los puntos medios, utilice el argumento mean. Punto = FALSE.
fviz_pca_ind(iris.pca,
geom.ind = "point", # show points only (but not "text")
group.ind = iris$Species, # color by groups
legend.title = "Groups",
mean.point = FALSE)

3.4.5.6 Axis lines

El argumento axes.linetype puede utilizarse para especificar el tipo de línea de los ejes.

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

3.4.5.7 Graphical parameters

  • Los parámetros gráficos que pueden modificarse con ggpar() son:
  1. Títulos principales, etiquetas de los ejes y títulos de la leyenda .

  2. Posición de la leyenda. Valores posibles: “arriba”, “abajo”, “izquierda”, “derecha”, “ninguna”.

  3. 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 simple biplot de individuos y variables, escriba esto:
fviz_pca_biplot(res.pca, repel = TRUE,
col.var = "#2E9FDF", # Variables color
col.ind = "#696969" # Individuals color
)

  • Ahora, utilizando la salida de iris.pca, vamos a :
  1. Hacer un biplot de individuos y variables.

  2. Cambiar el color de los individuos por grupos: col.ind = iris$Species

  3. Mostrar sólo las etiquetas de las variables: label = “var” o utilizar geom.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")

  • Para personalizar los colores individuales y variables, utilizamos las funciones de ayuda fill_palette() y color_palette() [en el paquete ggpubr].
fviz_pca_biplot(iris.pca,
# Fill individuals by groups
geom.ind = "point",
pointshape = 21,
pointsize = 2.5,
fill.ind = iris$Species,
col.ind = "black",
# Color variable by groups
col.var = factor(c("sepal", "sepal", "petal", "petal")),
legend.title = list(fill = "Species", color = "Clusters"),
repel = TRUE # Avoid label overplotting
)+
ggpubr::fill_palette("jco")+ # Indiviual fill color
ggpubr::color_palette("npg") # Variable colors

  • 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, vamos a cambiar la transparencia de las variables por sus contribuciones usando el argumento alpha.var.
fviz_pca_biplot(iris.pca,
# Individuals
geom.ind = "point",
fill.ind = iris$Species, col.ind = "black",
pointshape = 21, pointsize = 2,
palette = "jco",
addEllipses = TRUE,
# Variables
alpha.var ="contrib", col.var = "contrib",
gradient.cols = "RdYlBu",
legend.title = list(fill = "Species", color = "Contrib",
alpha = "Contrib")
)

3.5 Supplementary elements

3.5.1 Definition and types

  • Las variables suplementarias y los individuos no se utilizan para la determinación de los componentes principales. 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 Specification in PCA

  • Para especificar los individuos y las variables suplementarias, se puede utilizar la función PCA() como siguiente:
res.pca <- PCA(decathlon2, ind.sup = 24:27,
quanti.sup = 11:12, quali.sup = 13, graph=FALSE)

3.5.3 Quantitative variables

  • 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
fviz_pca_var(res.pca)

  • Obsérvese que, por defecto, las variables cuantitativas suplementarias se muestran en color azul y las líneas discontinuas . A continuacion Otros argumentos para personalizar la trama:
# Change color of variables
fviz_pca_var(res.pca,
col.var = "black", # Active variables
col.quanti.sup = "red" # Suppl. quantitative variables
)

# Hide active variables on the plot,
# show only supplementary variables
fviz_pca_var(res.pca, invisible = "var")

# Hide supplementary variables
fviz_pca_var(res.pca, invisible = "quanti.sup")

# Plot of active variables
p <- fviz_pca_var(res.pca, invisible = "quanti.sup")

# Plot of active variables
p <- fviz_pca_var(res.pca, invisible = "quanti.sup")

3.5.4 Individuals

  • Resultados previstos para los individuos suplementarios (ind.sup):
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
  • Visualize todos los individuos (activos y complementarios). En el gráfico :
p <- fviz_pca_ind(res.pca, col.ind.sup = "blue", repel = TRUE)
p <- fviz_add(p, res.pca$quali.sup$coord, color = "red")
p

3.5.5 Qualitative variables

  • Los resultados relativos a la variable cualitativa complementaria son:
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 sirve para especificar el índice de la variable cualitativa suplementaria.
fviz_pca_ind(res.pca, habillage = 13,
addEllipses =TRUE, ellipse.type = "confidence",
palette = "jco", repel = TRUE)

3.6 Filtering results

# Visualize variable with cos2 >= 0.6
fviz_pca_var(res.pca, select.var = list(cos2 = 0.6))

# Top 5 active variables with the highest cos2
fviz_pca_var(res.pca, select.var= list(cos2 = 5))

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

# top 5 contributing individuals and variable
fviz_pca_biplot(res.pca, select.ind = list(contrib = 5),
select.var = list(contrib = 5),
ggtheme = theme_minimal())

3.7 Exporting results

3.7.1 Export plots to PDF/PNG files

  • El paquete factoextra produce un gráfico basado en ggplot2. Para guardar cualquier ggplot, el código código estándar de R es el siguiente:
  1. El primer paso es crear los gráficos que desea como un objeto R:
# Scree plot
scree.plot <- fviz_eig(res.pca)
# Plot of individuals
ind.plot <- fviz_pca_ind(res.pca)
# Plot of 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") # Create a new pdf device
print(scree.plot)
print(ind.plot)
print(var.plot)
dev.off() # Close the pdf device
## png 
##   2
  • Para imprimir cada gráfico en un archivo png específico, el código de R tiene el siguiente aspecto:
# Print scree plot to a png file
png("pca-scree-plot.png")
print(scree.plot)
dev.off()
## png 
##   2
# Print individuals plot to a png file
png("pca-variables.png")
print(var.plot)
dev.off()
## png 
##   2
# Print variables plot to a png file
png("pca-individuals.png")
print(ind.plot)
dev.off()
## png 
##   2
  • Exportar parcelas individuales a un archivo pdf (una parcela por página):
library(ggpubr)
## Warning: package 'ggpubr' was built under R version 4.1.3
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 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 uno de los gráficos.
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 Export results to txt/csv files

  • Todos los resultados del PCA (coordenadas de individuos/variables, contribuciones, etc.) pueden ser exportar de una vez, en un archivo TXT/CSV, utilizando la función ) write.infile([en FactoMineR] del paquete FactoMineR:
# Export into a TXT file
write.infile(res.pca, "pca.txt", sep = "\t")
# Export into a CSV file
write.infile(res.pca, "pca.csv", sep = ";")

3.8 Summary

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

  1. Uso de prcomp() [stats]
res.pca <- prcomp(iris[, -5], scale. = TRUE)
  1. Uso de princomp() [stats]
res.pca <- princomp(iris[, -5], cor = TRUE)
  1. uso de dudi.pca() [ade4]
library("ade4")
## Warning: package 'ade4' was built under R version 4.1.3
## 
## Attaching package: 'ade4'
## The following object is masked from 'package:FactoMineR':
## 
##     reconst
res.pca <- dudi.pca(iris[, -5], scannf = FALSE, nf = 5)
  1. Uso de epPCA() [ExPosition]
library("ExPosition")
## Loading required package: prettyGraphs
res.pca <- epPCA(iris[, -5], graph = FALSE)
fviz_eig(res.pca) # Scree plot

fviz_pca_ind(res.pca) # Graph of individuals

fviz_pca_var(res.pca) # Graph of variables

Conclusión

Gracias a las múltiples operaciones realizadas en el sistema de programación R, se logró concretar de manera clara como un conjunto de variables originales pueden ser transformadas de forma óptima en un nuevo conjunto de ellas, en las cuales estas dejan de estar ligadas y de cierta forma correlacionadas entre sí. Este método multivariante es capaz entonces de agrupar y seleccionar múltiples variables y reducir su número de forma notable, como resultado de combinaciones lineales.