fviz_pca: Quick Principal Component Analysis data visualization - R software and data mining
Description
Draw the graph of individuals/variables from the output of Principal Component Analysis (PCA).
The following functions, from factoextra package are use:
- fviz_pca_ind(): Graph of individuals
- fviz_pca_var(): Graph of variables
- fviz_pca_biplot() (or fviz_pca()): Biplot of individuals and variables
Install and load factoextra
The package devtools is required for the installation as factoextra is hosted on github.
# install.packages("devtools")
library("devtools")
install_github("kassambara/factoextra")
Load factoextra :
library("factoextra")
Usage
# Graph of individuals
fviz_pca_ind(X, axes = c(1, 2), geom = c("point", "text"),
label = "all", invisible = "none", labelsize = 4,
pointsize = 2, habillage = "none",
addEllipses = FALSE, ellipse.level = 0.95,
col.ind = "black", col.ind.sup = "blue", alpha.ind = 1,
select.ind = list(name = NULL, cos2 = NULL, contrib = NULL),
jitter = list(what = "label", width = NULL, height = NULL), ...)
# Graph of variables
fviz_pca_var(X, axes = c(1, 2), geom = c("arrow", "text"),
label = "all", invisible = "none", labelsize = 4,
col.var = "black", alpha.var = 1, col.quanti.sup = "blue",
col.circle = "grey70",
select.var = list(name =NULL, cos2 = NULL, contrib = NULL),
jitter = list(what = "label", width = NULL, height = NULL))
# Biplot of individuals and variables
fviz_pca_biplot(X, axes = c(1, 2), geom = c("point", "text"),
label = "all", invisible = "none", labelsize = 4, pointsize = 2,
habillage = "none", addEllipses = FALSE, ellipse.level = 0.95,
col.ind = "black", col.ind.sup = "blue", alpha.ind = 1,
col.var = "steelblue", alpha.var = 1, col.quanti.sup = "blue",
col.circle = "grey70",
select.var = list(name = NULL, cos2 = NULL, contrib= NULL),
select.ind = list(name = NULL, cos2 = NULL, contrib = NULL),
jitter = list(what = "label", width = NULL, height = NULL), ...)
# An alias of fviz_pca_biplot()
fviz_pca(X, ...)
Arguments
Argument | Description |
---|---|
X | an object of class PCA [FactoMineR]; prcomp and princomp [stats]; dudi and pca [ade4]. |
axes | a numeric vector of length 2 specifying the dimensions to be plotted. |
geom | a text specifying the geometry to be used for the graph. Allowed values are the combination of c(“point”, “arrow”, “text”). Use “point” (to show only points); “text” to show only labels; c(“point”, “text”) or c(“arrow”, “text”) to show both types. |
label | a text specifying the elements to be labelled. Default value is “all”. Allowed values are “none” or the combination of c(“ind”, “ind.sup”, “quali”, “var”, “quanti.sup”). “ind” can be used to label only active individuals. “ind.sup” is for supplementary individuals. “quali” is for supplementary qualitative variables. “var” is for active variables. “quanti.sup” is for quantitative supplementary variables. |
invisible | a text specifying the elements to be hidden on the plot. Default value is “none”. Allowed values are the combination of c(“ind”, “ind.sup”, “quali”, “var”, “quanti.sup”). |
labelsize | font size for the labels. |
pointsize | the size of points. |
habillage | an optional factor variable for coloring the observations by groups. Default value is “none”. If X is a PCA object from FactoMineR package, habillage can also specify the supplementary qualitative variable (by its index or name) to be used for coloring individuals by groups (see ?PCA in FactoMineR). |
addEllipses | logical value. If TRUE, draws ellipses around the individuals when habillage != “none”. |
ellipse.level | the size of the concentration ellipse in normal probability. |
col.ind,col.var | colors for individuals and variables, respectively. Possible values include also : “cos2”, “contrib”, “coord”, “x” or “y”. In this case, the colors for individuals/variables are automatically controlled by their qualities of representation (“cos2”), contributions (“contrib”), coordinates (x^2 + y^2, “coord”), x values (“x”) or y values (“y”). To use automatic coloring (by cos2, contrib, ….), make sure that habillage =“none”. |
col.ind.sup | color for supplementary individuals. |
alpha.ind,alpha.var | controls the transparency of individual and variable colors, respectively. The value can variate from 0 (total transparency) to 1 (no transparency). Default value is 1. Possible values include also : “cos2”, “contrib”, “coord”, “x” or “y”. In this case, the transparency for the individual/variable colors are automatically controlled by their qualities (“cos2”), contributions (“contrib”), coordinates (x^2 + y^2 , “coord”), x values(“x”) or y values(“y”). To use this, make sure that habillage =“none”. |
select.ind,select.var |
a selection of individuals/variables to be drawn. Allowed values are NULL or a list containing the arguments name, cos2 or contrib:
|
jitter | a parameter used to jitter the points in order to reduce overplotting. It’s a list containing the objects what, width and height (Ex.; jitter = list(what, width, height)). what: the element to be jittered. Possible values are “point” or “p”; “label” or “l”; “both” or “b”. width: degree of jitter in x direction (ex: 0.2). height: degree of jitter in y direction (ex: 0.2). |
col.quanti.sup | a color for the quantitative supplementary variables. |
col.circle | a color for the correlation circle. |
… | Arguments to be passed to the function fviz_pca_biplot(). |
Value
A ggplot2 plot
Examples
Principal component analysis
A principal component analysis (PCA) is performed using the built-in R function prcomp() and iris data:
data(iris)
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
# The variable Species (index = 5) is removed
# before the PCA analysis
res.pca <- prcomp(iris[, -5], scale = TRUE)
fviz_pca_ind(): Graph of individuals
# Default plot
fviz_pca_ind(res.pca)
# Change title and axis labels
fviz_pca_ind(res.pca) +
labs(title ="PCA", x = "PC1", y = "PC2")
# Change axis limits by specifying the min and max
fviz_pca_ind(res.pca) +
xlim(-4, 4) + ylim (-4, 4)
# Use text only
fviz_pca_ind(res.pca, geom="text")
# Use points only
fviz_pca_ind(res.pca, geom="point")
# Change the size of points
fviz_pca_ind(res.pca, geom="point", pointsize = 4)
# Change point color and theme
fviz_pca_ind(res.pca, col.ind = "blue")+
theme_minimal()
# Control automatically the color of individuals
# using the cos2 or the contributions
# cos2 = the quality of the individuals on the factor map
fviz_pca_ind(res.pca, col.ind="cos2")
# Gradient color
fviz_pca_ind(res.pca, col.ind="cos2") +
scale_color_gradient2(low="white", mid="blue",
high="red", midpoint=0.6)
# Change the theme and use only points
fviz_pca_ind(res.pca, col.ind="cos2", geom = "point") +
scale_color_gradient2(low="white", mid="blue",
high="red", midpoint=0.6)+ theme_minimal()
# Color by the contributions
fviz_pca_ind(res.pca, col.ind="contrib") +
scale_color_gradient2(low="white", mid="blue",
high="red", midpoint=4)
# Control the transparency of the color by the
# contributions
fviz_pca_ind(res.pca, alpha.ind="contrib") +
theme_minimal()
# Color individuals by groups
fviz_pca_ind(res.pca, label="none", habillage=iris$Species)
# Add ellipses
p <- fviz_pca_ind(res.pca, label="none", habillage=iris$Species,
addEllipses=TRUE, ellipse.level=0.95)
print(p)
# Change group colors using RColorBrewer color palettes
p + scale_color_brewer(palette="Dark2") +
theme_minimal()
p + scale_color_brewer(palette="Paired") +
theme_minimal()
p + scale_color_brewer(palette="Set1") +
theme_minimal()
# Change color manually
p + scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))
# Select and visualize individuals with cos2 > 0.96
fviz_pca_ind(res.pca, select.ind = list(cos2 = 0.96))
# Select the top 20 according the cos2
fviz_pca_ind(res.pca, select.ind = list(cos2 = 20))
# Select the top 20 contributing individuals
fviz_pca_ind(res.pca, select.ind = list(contrib = 20))
# Select by names
fviz_pca_ind(res.pca,
select.ind = list(name = c("23", "42", "119")))
fviz_pca_var(): Graph of variables
# Default plot
fviz_pca_var(res.pca)
# Use points and text
fviz_pca_var(res.pca, geom = c("point", "text"))
# Change color and theme
fviz_pca_var(res.pca, col.var="steelblue")+
theme_minimal()
# Control variable colors using their contributions
fviz_pca_var(res.pca, col.var="contrib")+
scale_color_gradient2(low="white", mid="blue",
high="red", midpoint=96) +
theme_minimal()
# Control the transparency of variables using their contributions
fviz_pca_var(res.pca, alpha.var="contrib") +
theme_minimal()
# Select and visualize variables with cos2 >= 0.96
fviz_pca_var(res.pca, select.var = list(cos2 = 0.96))
# Select the top 3 contributing variables
fviz_pca_var(res.pca, select.var = list(contrib = 3))
# Select by names
fviz_pca_var(res.pca,
select.var= list(name = c("Sepal.Width", "Petal.Length")))
fviz_pca_biplot(): Biplot of individuals of variables
fviz_pca_biplot(res.pca)
# Keep only the labels for variables
fviz_pca_biplot(res.pca, label ="var")
# Keep only labels for individuals
fviz_pca_biplot(res.pca, label ="ind")
# Hide variables
fviz_pca_biplot(res.pca, invisible ="var")
# Hide individuals
fviz_pca_biplot(res.pca, invisible ="ind")
# Control automatically the color of individuals using the cos2
fviz_pca_biplot(res.pca, label ="var", col.ind="cos2") +
theme_minimal()
# Change the color by groups, add ellipses
fviz_pca_biplot(res.pca, label="var", habillage=iris$Species,
addEllipses=TRUE, ellipse.level=0.95)
# Select the top 30 contributing individuals
fviz_pca_biplot(res.pca, label="var",
select.ind = list(contrib = 30))
Infos
This analysis has been performed using R software (ver. 3.2.1) and factoextra (ver. 1.0.3)
Enjoyed this article? I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Twitter, Facebook or Linked In.
Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Avez vous aimé cet article? Je vous serais très reconnaissant si vous aidiez à sa diffusion en l'envoyant par courriel à un ami ou en le partageant sur Twitter, Facebook ou Linked In.
Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!
Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!
Recommended for You!
Recommended for you
This section contains the best data science and self-development resources to help you on your path.
Books - Data Science
Our Books
- Practical Guide to Cluster Analysis in R by A. Kassambara (Datanovia)
- Practical Guide To Principal Component Methods in R by A. Kassambara (Datanovia)
- Machine Learning Essentials: Practical Guide in R by A. Kassambara (Datanovia)
- R Graphics Essentials for Great Data Visualization by A. Kassambara (Datanovia)
- GGPlot2 Essentials for Great Data Visualization in R by A. Kassambara (Datanovia)
- Network Analysis and Visualization in R by A. Kassambara (Datanovia)
- Practical Statistics in R for Comparing Groups: Numerical Variables by A. Kassambara (Datanovia)
- Inter-Rater Reliability Essentials: Practical Guide in R by A. Kassambara (Datanovia)
Others
- R for Data Science: Import, Tidy, Transform, Visualize, and Model Data by Hadley Wickham & Garrett Grolemund
- Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems by Aurelien Géron
- Practical Statistics for Data Scientists: 50 Essential Concepts by Peter Bruce & Andrew Bruce
- Hands-On Programming with R: Write Your Own Functions And Simulations by Garrett Grolemund & Hadley Wickham
- An Introduction to Statistical Learning: with Applications in R by Gareth James et al.
- Deep Learning with R by François Chollet & J.J. Allaire
- Deep Learning with Python by François Chollet
Get involved :
Click to follow us on Facebook :
Comment this article by clicking on "Discussion" button (top-right position of this page)
Click to follow us on Facebook :
Comment this article by clicking on "Discussion" button (top-right position of this page)