前面给大家简单介绍了做PCA分析并绘图的R包factoextra
☞【R语言】factoextra生成发表级PCA主成分分析图(一)
主要讲了如何展示样本的主成分分析结果,即样本在新的空间中的分布情况,便于查看样本分群的结果。
今天我们来讲讲如何展示特征的分布,我们还是使用iris这套数据集
代码语言:javascript复制#加载这两个R包
library(FactoMineR)
library(factoextra)
#做PCA分析,第五列为物种,非数值属性需要去除
iris.pca <- PCA(iris[,-5], graph = T)
#获取样本的主成分分析结果
var <- get_pca_var(iris.pca)
#查看特征分布
fviz_pca_var(iris.pca)
这张图展示的是原始特征在新空间中的分布情况,这四个特征的坐标存放在var$coord中
我们以Sepal.Length这个特征为例,在Dim1和Dim2的二维空间中的横坐标是0.89,纵坐标是0.36,如上图所示。
在前面一期的内容里我们也介绍了如何查看每一个原始特征对每一个PC的贡献程度
代码语言:javascript复制#查看每一个特征对每一个主成分的贡献程度
var$contrib
我们可以用相关性图来展示贡献程度
代码语言:javascript复制library("corrplot")
corrplot(var$contrib, is.corr=FALSE)
我们可以看到Sepal.Width这个特征对Dim.2的贡献最大。
柱形图来展示,原始四个特征对PC1的贡献程度
代码语言:javascript复制fviz_contrib(iris.pca, choice = "var", axes = 1)
与var$contrib中的结果一致
当然我们可以展示每一个原始特征对PC1和PC2的综合贡献程度
代码语言:javascript复制fviz_contrib(iris.pca, choice = "var", axes = 1:2)
可以看出结果有所变化,因为Sepal.Width这个特征对Dim.2的贡献实在太大了
接下来我们可以在展示特征分布的时候根据特征对PC的贡献程度来着色
代码语言:javascript复制#根据贡献度着色
fviz_pca_var(iris.pca,
col.var="contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")
)
这个颜色的深浅代表了每一个原始特征对PC1-2的综合贡献程度,跟上面的柱形图的结果一致
当然我们还可以从另一个角度来展示特征,即各个原始特征多大程度上能代表各个PC,这里我们叫做代表质量
代码语言:javascript复制#corrplot展示各变量对各主成分的代表质量
library("corrplot")
# is.corr表示输入的矩阵不是相关系数矩阵
corrplot(var$cos2, is.corr=FALSE)
Petel.Lenth最能代表PC1,而Sepal.Width最能代表PC2,也在一定程度上能代表PC1。
当然我们也可以考虑每一个原始特征对PC1和PC2的综合代表性
代码语言:javascript复制fviz_cos2(iris.pca, choice = "var", axes = 1:2)
可以看出Sepal.Width要比Petel.Lenth的代表性更好
接下来我们可以在展示特征分布的时候根据特征对PC的代表性来着色
代码语言:javascript复制#根据代表性着色
fviz_pca_var(iris.pca,
col.var="cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")
)
可以看出这个结果其实跟使用贡献度的结果大同小异
今天的分享就先到这里,下一期我们将跟大家分享,如何将样本和特征同时展示在以PC为坐标的图上。
参考资料:
☞R做PCA主成分分析
☞【R语言】factoextra生成发表级PCA主成分分析图(一)