Trabajaremos con los siguientes paquetes: FactoMineR, factoextra, ggplot2. Además de la base de datos iris esta se encuentra conformada por mediciones del ancho y largo del sépalo y pétalo de tres especies del género Iris (Iridaceae)

library(FactoMineR)
library(factoextra)
library(ggplot2)

Visualización de los datos que acabas de importar

head: sirve para visualizar las primeras filas y columnas de todo el conjunto de datos

head(iris)
##   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
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

Es necesario eliminar la variable Species dentro del conjunto de datos iris, como el index no se cuenta la posición en que se encuentra esta variable es 5, además crear un nuevo conjunto de datos que te excluya dicha variable en este caso coloco prueba.pca puedes utilizar cualquier nombre. Puedes realizarlo de la siguiente manera:

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

Análisis de Componentes Principales

En este punto ya podemos vizualizar nuestro PCA, donde nos muestra los grupos generados por las especies, además del valor porcentual de cada dimensión. Por su parte la paleta de colores viene dada por códigos, estos hacen referencia a colores especificos por lo que si desean colocarlo a su estilo pueden buscarlos en la web.

fviz_pca_ind(prueba.pca,
             geom.ind = "point",
             col.ind = iris$Species, 
             palette = c("#FF6666", "#3399FF", "#99FF99"),
             addEllipses = TRUE, 
             legend.title = "Groups")

Para que cada grupo tenga una solo forma geométrica remplazamos puntos, triángulos y cuadrados por solo puntos con pointshape=16, 16 hace referencia a punto o círculo si deseas colocar que todo sea triángulos o cuadrados o cualquier figura de tu interés puedes ir cambiando el número.

fviz_pca_ind(prueba.pca, geom.ind = "point",pointshape = 16,
             col.ind = iris$Species, 
             palette = c("#FF6666", "#3399FF", "#99FF99"),
             addEllipses = TRUE, ellipse.type = "confidence",
             legend.title = "Groups")

Con la función ellipse.type podemos convertir las elipses a polígonos = “convex”

fviz_pca_ind(prueba.pca, geom.ind = "point",pointshape = 16, pointsize = 3,
             col.ind = iris$Species, 
             palette = c("#00BFFF", "#EE2C2C", "#76EE00","#EE1289"),
             addEllipses = TRUE, ellipse.type = "convex",
             legend.title = "Groups", cex.lab=3.0)

Si queremos mostrar el biplot donde se vean los grupos y las variables que los forman se añade fviz_pca_biplot y label=“var”, se describe el script a continuación:

fviz_pca_biplot(prueba.pca, geom.ind = "point",pointshape = 16, pointsize = 3,
                label="var", habillage=iris$Species, 
                palette = c("#00BFFF", "#EE2C2C", "#76EE00"),
                addEllipses=TRUE, ellipse.type = "convex", cex.lab=3.0)

Luego mediante el siguiente script podemos sacar los eigenvalue repartidos en cada dimensión los que muestra el PCA en el gráfico es la variación porcentual acumulada.

eig.val<-get_eigenvalue(prueba.pca)
eig.val
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1 2.91849782       72.9624454                    72.96245
## Dim.2 0.91403047       22.8507618                    95.81321
## Dim.3 0.14675688        3.6689219                    99.48213
## Dim.4 0.02071484        0.5178709                   100.00000

la variación porcentual acumulada para cada dimesnión se gráfica de la siguiente forma. Es necesario saber que dimesnión se lleva el mayor porcentaje en este caso es la dimensión 1, por lo tanto con ylim colocamos el rango en que se encuentra ese valor para que el porcetaje quede sobre la barra, de lo contrario no lo muestra.

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

Contribución de cada variable en cada dimensión, previamente es necesario ejecutar el siguiente script

var <- get_pca_var(prueba.pca)
head(var$contrib)
##                  Dim.1       Dim.2     Dim.3     Dim.4
## Sepal.Length 27.150969 14.24440565 51.777574  6.827052
## Sepal.Width   7.254804 85.24748749  5.972245  1.525463
## Petal.Length 33.687936  0.05998389  2.019990 64.232089
## Petal.Width  31.906291  0.44812296 40.230191 27.415396

Graficar la contribución de las variables en la primera dimesión

fviz_contrib(prueba.pca, choice = "var", axes = 1, top = 10)

Contribución de las variables en la segunda dimesión, si quieremos vizualizar la dimesión 3 simplemente es colocar axis=3 y así sucesivamente para las otras.

fviz_contrib(prueba.pca, choice = "var", axes = 2, top = 10)

Coordenadas de cada variable por cada dimesión

head(var$coord)
##                   Dim.1      Dim.2       Dim.3       Dim.4
## Sepal.Length  0.8901688 0.36082989 -0.27565767 -0.03760602
## Sepal.Width  -0.4601427 0.88271627  0.09361987  0.01777631
## Petal.Length  0.9915552 0.02341519  0.05444699  0.11534978
## Petal.Width   0.9649790 0.06399985  0.24298265 -0.07535950

Círculo de correlación entre las variables

fviz_pca_var(prueba.pca, col.var = "blue")