专栏首页庄闪闪的R语言手册R可视乎|主成分分析结果可视化

R可视乎|主成分分析结果可视化

简介

主成分分析法是很常用的一种数据降维方法[1]。该方法可以减少数据的维数,并保持对方差贡献最大的特征,相当于保留低阶主成分,忽略高阶主成分。

关于主成分的理论介绍和R语言代码实现可见前段时间赵西西写的推文:主成分分析。但是后面留了一个小尾巴,如果想对主成分结果进行可视化,那得怎么实现?有没有简便的方法呢?

正好这几天有读者问起,那今天就来说说这个问题吧。

方法一

使用ggbiplot包[2]中的ggbiplot()函数,该函数 使用ggplot2对主成分进行可视化。函数内部参数如下

  ggbiplot(pcobj, choices = 1:2, scale = 1, pc.biplot =
  TRUE, obs.scale = 1 - scale, var.scale = scale, groups =
  NULL, ellipse = FALSE, ellipse.prob = 0.68, labels =
  NULL, labels.size = 3, alpha = 1, var.axes = TRUE, circle
  = FALSE, circle.prob = 0.69, varname.size = 3,
  varname.adjust = 1.5, varname.abbrev = FALSE, ...)

内部参数过多,就不做详细解释。如果对内部参数有兴趣可以通过帮助文档进行查询(?ggbiplot)。

这里使用鸢尾花数据,给出一个简单的例子。大家可以将自己的数据进行导入(如何导入?可见推文:R数据科学|第八章内容介绍),替换鸢尾花数据。

注意:检查自己数据集的数据结构是否和鸢尾花数据结构一致

这个包在github中,官方说可以使用以下参数进行下载(但是小编下载不了,只能通过强暴的方法进行,具体可见推文:。该压缩包已经处理成tar.gz放到公众号内了,如有需要,后台回复[ggbiplot]即可获得)。

使用prcomp()进行主成分分析,然后将结果保存到res.pca变量中。之后使用ggbiplot()进行可视化。其中观测的尺度因子为1(obs.scale = 1),变量的尺度因子为1(var.scale = 1),每组绘制一个椭圆(ellipse = TRUE)并添加相关系数的圆。

# install_github("vqv/ggbiplot")
library(ggbiplot)
res.pca <- prcomp(iris[, -5],  scale = TRUE)
ggbiplot(res.pca, obs.scale = 1, var.scale = 1, ellipse = TRUE, circle = TRUE)

如果想给不同组别添加分别显示不同颜色,则可以使用参数groups,然后设定为原始数据对应的组别向量(如果你的原始数据没有该列数据,可以自行构造一个向量。)

# 添加组别颜色
ggbiplot(res.pca, obs.scale = 1, var.scale = 1, ellipse = TRUE,groups = iris$Species, circle = TRUE)

当然你可以在此基础上加入ggplot内部的参数,比如更改主题,更改颜色,添加标题等一系列操作。

# 更改主题
ggbiplot(res.pca, obs.scale = 1, var.scale = 1, ellipse = TRUE,groups = iris$Species, circle = TRUE) +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  scale_color_brewer(palette = "Set2") +
  labs(title = "庄闪闪的R语言手册",subtitle = "快来关注这个宝藏公众号呀!",caption ="绘于:洞头岛")

小编最近有幸上了两节线上的R语言数据可视化公益课,把R语言base包以及ggplot语法系统的过了一遍,如果需要补补可视化基础的朋友,可移步我的b站[账号名:庄闪闪],视频回放已等你多时了?。

方法二

使用FactoMineR包[3]PCA()函数或者使用基础包的prcomp()函数进行数据降维处理,然后使用factoextra包[4]fviz_pca_ind()函数对结果进行可视化。

这里还是以鸢尾花的数据作为例子,沿用方法一的主成分分析结果res.pca。

这个包内部有四个主要绘制主成分结果的函数。

  • fviz_pca_ind(): 各样本的散点图
  • fviz_pca_var(): 变量图
  • fviz_pca_biplot(): 各个样本和变量的联合图
  • fviz_pca(): fviz_pca_biplot()的别名

内部参数不做过多介绍,有兴趣的读者请看帮助文档。这里只对下面的代码中出现的参数进行解释。

各样本的散点图

使用散点图进行绘制(geom = "point"),颜色使用"cos2"(col.ind="cos2"),使用3阶梯度颜色(gradient.cols = c("white", "#2E9FDF", "#FC4E07" ))。

library(ggplot2)
library(factoextra) #可以直接通过install.packages()进行下载
# 各个样本图
fviz_pca_ind(res.pca, col.ind="cos2", geom = "point",
             gradient.cols = c("white", "#2E9FDF", "#FC4E07" ))

展示分组变量信息

如果想展示分组变量信息,可以通过habillage参数设定,和第一种方法类似,这里还加入了一些细节:各组添加椭圆(addEllipses=TRUE),图的版式使用"Dark2"(palette = "Dark2")。

fviz_pca_ind(res.pca, label="none", habillage=iris$Species,
             addEllipses=TRUE, ellipse.level=0.95, palette = "Dark2")

当然可以使用palette = c("#999999", "#E69F00", "#56B4E9"),根据论文全文配色,进行手动调整。

fviz_pca_ind(res.pca, label="none", habillage=iris$Species,
             addEllipses=TRUE, ellipse.level=0.95,
             palette = c("#999999", "#E69F00", "#56B4E9"))

个体和变量的双图

如果想绘制个体和变量的双图,可以使用fviz_pca_biplot(),内部其他参数构造相同,然后可以添加各种其他ggplot的函数,例如:

# 个体和变量的双图
# 只保留变量的标签 #按组改变颜色,添加省略号
fviz_pca_biplot(res.pca, label = "var", habillage=iris$Species,
                addEllipses=TRUE, ellipse.level=0.95,
                ggtheme = theme_bw()) +
  theme(panel.grid = element_blank()) +
  scale_color_brewer(palette = "Set1") +
  labs(title = "庄闪闪的R语言手册",subtitle = "快来关注这个宝藏公众号呀!",caption ="绘于:洞头岛")

参考资料

[1]

数据降维方法: https://github.com/EasyChart/Beautiful-Visualization-with-R

[2]

ggbiplot包: https://github.com/vqv/ggbiplot

[3]

FactoMineR包: https://cran.r-project.org/web/packages/FactoMineR/index.html

[4]

factoextra包: https://cran.r-project.org/web/packages/factoextra/index.html

本文分享自微信公众号 - 庄闪闪的R语言手册(Zss_R4ds),作者:庄闪闪

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-01-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R可视乎|决策树结果可视化

    决策树是一种非常有用的分类方法,它能够对新出现的对象给出正确的分类。比起文本描述的规则,我们更希望能使用图形来直观展示决策树的结果,这就是本文介绍的重点——决策...

    庄闪闪
  • R语言无监督学习:PCA主成分分析可视化

    在监督学习中,我们通常可以访问n个  观测值的p个  特征  集  ,并 在相同观测值上测得的  Y。

    拓端
  • R可视乎|分面一页多图

    双变量数据可视化可能对于我们比较简单, 但是如果变量是三个或者更多,怎么在一幅图一起显示呢?今天我们就来讨论这个问题,解决方案有两种。

    庄闪闪
  • R语言生存分析可视化分析

    从“应对治疗”(完全缓解)到发生感兴趣事件的时间通常称为生存时间(或事件发生的时间)。

    拓端
  • PCA主成分分析实战和可视化 | 附R代码和测试数据

    一文看懂PCA主成分分析中介绍了PCA分析的原理和分析的意义(基本简介如下,更多见博客),今天就用数据来实际操练一下。

    生信宝典
  • R语言进化树分析及可视化

    生物进化树基本理论指出所有的生物都可以追溯到共同的祖先,生物的产生和分化就像树一样地生长、分叉,以树的形式来表示生物之间的进化关系是非常自然的事。可以用树中的各...

    一粒沙
  • R语言中相关性分析可视化

    相关系数的计算大家都不陌生,那么如何让相关系数转变为可视化的结果成为大家比较头疼的事情,今天我们来介绍下R语言中相关系数的可视化实现方法。

    一粒沙
  • Nomogram(诺莫图) | Logistic、Cox生存分析结果可视化

    Nomogram,也被称为诺莫图或者列线图,在医学领域的期刊出现频率越来愈多,常用于评估肿瘤学和医学的预后情况,可将Logistic回归或Cox回归的结果进行可...

    西游东行
  • Pandas统计分析-分组->透视->可视化

    瑞新

扫码关注云+社区

领取腾讯云代金券