上节我们介绍了主成分分析方法的原理及使用步骤,为了便于大家理解,举的例子比较简单。

在实际应用中,面对的数据集都十分庞大,计算结果也比较复杂,为了对于这些复杂结果进行分析和展示,需要实现结果的数据可视化,同时这也是降维分析的主要作用之一。

因此,本节我们主要介绍主成分分析结果的可视化,R语言提供了大量优秀的绘图包,可以帮助我们完成这一任务。

R语言中自带了一些示例数据集,便于我们进行演示,使用如下命令可以查看datasets包包含的所有基本数据集:

data(package = 'datasets')

本节使用经典的鸢尾花数据集为例介绍分析结果可视化。

使用如下命令可以载入该数据集:

data('iris')

图1为iris数据集内容,其中包含了每个样本的四种性状及品种信息,共有三个品种。

聚类法分析几维数据(数据降维与聚类方法)(1)

图1 鸢尾花数据集内容

使用上节提到的prcomp()函数对该数据集的前四列进行主成分分析,并对主成分得分的前两列绘制一个简单的散点图,过程及结果如下:

pca = prcomp(iris[,1:4], scale = T) plot(pca$x[,1:2])

聚类法分析几维数据(数据降维与聚类方法)(2)

图2 鸢尾花数据集主成分散点图

这个图像十分简陋,而且不能很好地区分三个品种,接下来我们将介绍一个专用于主成分分析的绘图包ggbiplot的使用

01

ggbiplot包的安装

ggbiplot是专门用于主成分分析结果可视化的R包,可以直接可视化函数prcomp()、princomp()分析的结果,简便易用。同时具备按分组着色、分组添加不同大小椭圆、主成分与原始变量贡献度向量显示等功能。

ggbiplot包的安装步骤如下,稍微有点麻烦,大家要耐心哦~

1)首先在https://cran.r-project.org/bin/windows/Rtools/下载安装对应版本的Rtools,随后重启RStudio;

2)使用如下指令安装devtools包:

install.packages("devtools")

3)使用如下指令安装ggbiplpt包:

library(devtools) install_github("vqv/ggbiplot")

输入library(ggbiplot),若未报错则安装成功。

ggbiplot包中只有两个函数和一个数据集,接下来分别介绍。

02

ggsreeplot()函数的介绍

ggscreeplot()函数用于绘制碎石图,碎石图是主成分分析里展现主成分涵盖变量信息多少的图,其含义与上节所讲到的各主成分标准差所占标准差总和的比例相同一般是先陡后缓,第一个主成分涵盖信息最多,依次减少。

通过碎石图,即可根据需求选取合适的主成分数目。

函数只有一个额外参数,使用方法如下:

ggscreeplot(pca [,type = "pev"])

其中,pca是princomp()或prcomp()输出的结果,[]内的type为可选参数,可以省略。

type有两种选项,默认为"pev",此时纵轴为各主成分所占比例,设置为"cev"时纵轴代表了前n个主成分累积所占比例,可以根据需求选取。

使用之前计算的示例数据绘制碎石图如下:

ggscreeplot(pca)

聚类法分析几维数据(数据降维与聚类方法)(3)

图3 鸢尾花数据集主成分分析碎石图

可以看到第三和第四个主成分已经降到5%以下,因此我们选取前两个主成分就足以涵盖数据集中的绝大部分信息,使用前两个主成分将数据集降到二维后,利用平面直角坐标系绘制散点图即可展示样本数据特征。

03

ggbiplot()函数的介绍

ggbiplot()函数能够实现分组着色、分组添加不同大小椭圆、主成分与原始变量贡献度向量绘制等功能,它的输出是一张ggplot2绘图。

使用方法如下:

ggbiplot(pca [其他参数])

其中,pca是princomp()或prcomp()输出的结果,[]内的其他参数可以省略,用于控制绘图选项,这些参数以"="赋值,以","分隔。

其中我们需要关注的部分参数介绍如下:

choices: 选择两个要绘制的主成分,默认为前两列,即choices=1:2,若想调换横轴纵轴可使用choices=2:1;

scale:若设为0则为普通biplot,横纵轴均为主成分得分;若设为1则为协方差biplot,横纵轴经过处理,坐标轴名称增加了前缀standardized,在处理变量之间关系的问题时可能会有帮助。

obs.scale:应用于观测值的比例系数,通常可设为1;

var.scale:应用于原始变量的比例系数,通常可设为1;

groups:分组信息,应当输入一个与样本个数相同的因子类型的变量,在本例中为iris[,5];

ellipse:逻辑型变量,代表是否要为每个数据组绘制一个代表正常数据范围的椭圆形区域;

ellipse.prob:以正态分布置信区间来度量的椭圆大小,默认为2/3,若有过多数据出现在椭圆范围外,可适当增大这个数值;

labels:使用一个向量为每个样本点增加一个标签,通常可以使用行名称labels = rownames(iris),但是本例中数据集行名称只是编号,因此没有添加;

labels.size:labels的大小;

alpha:点的透明度,范围0~1;

circle:逻辑型变量,是否绘制相关环(只有使用prcomp且scale = TRUE,var.scale = 1时有效);

var.axes:逻辑型变量,是否绘制变量相关性向量,后面会详细讲述;

varname.size:变量名称的文字大小;

varname.adjust:文字与箭头的距离;

varname.abbrev:是否缩写变量名。

基于上述分析,我们使用如下命令对pca分析结果进行可视化:

ggbiplot(pca, obs.scale = 1, var.scale = 1, groups = iris[,5], ellipse = TRUE, ellipse.prob = 0.8)

得到图4所示图像:

聚类法分析几维数据(数据降维与聚类方法)(4)

图4 鸢尾花数据集主成分分析结果

可以看到横轴为主成分1,解释度为73%,纵轴为主成分2,解释度为22.9%,其中三个品种以不同颜色的点进行了区分,按照我们设置的置信度绘制了同一类型正常数据的椭圆区域,效果较好。

其中的四个标记了原始变量名称的箭头代表了四个原始变量对于两个主成分的贡献,每个箭头在横轴方向的投影代表了这个变量对于主成分1的贡献,在纵轴方向的投影代表了对主成分2的贡献,箭头的长度代表了综合影响的大小。

以图4为例,其中Sepal.Width数据对于主成分1和2都有较大的负相关性,而Petal.Length和Petal.Width仅与主成分1呈正相关,与主成分2无关。

同样地,样本点在向量同方向上越远,则表示该样本的此原始变量具有更高的数值。

04

wine数据集的介绍

ggbiplot包中自带一个wine数据集,这是一个包含了178个样本13个变量的酒类分析数据集,并且自带分类信息wine.class。

使用如下指令可以载入该数据集:

data(wine)

该数据集包含变量更多,更适用于主成分分析,有兴趣的读者可以自行尝试哦。

,