R语言主成分分析可视化(颜值高,很详细)

news2024/10/7 16:18:45

文章目录

    • PCA
    • 特征值可视化
    • 提取变量结果
    • 变量结果可视化
      • 变量和主成分的cos2可视化
      • 变量对主成分的贡献可视化
    • Dimension description
    • 提取样本结果
    • 样本结果可视化
      • 样本的cos2可视化
      • 样本对主成分的贡献可视化
    • biplot
    • 参考资料

网络上很多R语言教程都是基于R语言实战进行修改,今天为大家介绍更好用的R包,在之前聚类分析中也经常用到:factoextrafactoMineR,关于主成分分析的可视化,大家比较常见的可能是ggbiplot,这几个R包都挺不错,大家可以比较下。

之前已经多次用到了这两个R包:

  • PCA
  • 聚类

这两个R包的函数可以直接使用prcomp()函数的结果,也可以使用FactoMineRPCA()函数进行,结果更加详细。

PCA

使用R语言自带的iris鸢尾花数据进行演示。

rm(list = ls())
library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(FactoMineR)

pca.res <- PCA(iris[,-5], graph = F, scale.unit = T) # 简简单单1行代码实现主成分分析
pca.res
## **Results for the Principal Component Analysis (PCA)**
## The analysis was performed on 150 individuals, described by 4 variables
## *The results are available in the following objects:
## 
##    name               description                          
## 1  "$eig"             "eigenvalues"                        
## 2  "$var"             "results for the variables"          
## 3  "$var$coord"       "coord. for the variables"           
## 4  "$var$cor"         "correlations variables - dimensions"
## 5  "$var$cos2"        "cos2 for the variables"             
## 6  "$var$contrib"     "contributions of the variables"     
## 7  "$ind"             "results for the individuals"        
## 8  "$ind$coord"       "coord. for the individuals"         
## 9  "$ind$cos2"        "cos2 for the individuals"           
## 10 "$ind$contrib"     "contributions of the individuals"   
## 11 "$call"            "summary statistics"                 
## 12 "$call$centre"     "mean of the variables"              
## 13 "$call$ecart.type" "standard error of the variables"    
## 14 "$call$row.w"      "weights for the individuals"        
## 15 "$call$col.w"      "weights for the variables"

结果信息丰富,可以通过不断的$获取,也可以通过特定函数提取,下面介绍。

特征值可视化

获取特征值、方差贡献率和累积方差贡献率,可以看到和上一篇的结果是一样的:

get_eigenvalue(pca.res)
##       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

结果中的这几个概念在上一篇已经解释过了

通过这几个值,可以确定主成分个数,当然也可以通过碎石图(就是方差解释度的可视化)直观的观察:

fviz_eig(pca.res,addlabels = T,ylim=c(0,100))

提取变量结果

通过get_pca_var()`函数实现:

res.var <- get_pca_var(pca.res)
res.var$cor
##                   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
res.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
res.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
res.var$cos2        
##                  Dim.1       Dim.2       Dim.3        Dim.4
## Sepal.Length 0.7924004 0.130198208 0.075987149 0.0014142127
## Sepal.Width  0.2117313 0.779188012 0.008764681 0.0003159971
## Petal.Length 0.9831817 0.000548271 0.002964475 0.0133055723
## Petal.Width  0.9311844 0.004095980 0.059040571 0.0056790544
  • res.var$cor:变量和主成分的相关系数
  • res.var$coord: 变量在主成分投影上的坐标,下面会结合图说明,因为进行了标准化,所以和相关系数结果一样,其数值代表了主成分和变量之间的相关性
  • res.var$cos2: 是coord的平方,也是表示主成分和变量间的相关性,同一个变量所有cos2的总和是1
  • res.var$contrib: 变量对主成分的贡献

这几个结果都可以进行可视化。

变量结果可视化

使用fviz_pca_var()对变量结果进行可视化:

fviz_pca_var(pca.res)

res.var$coord是变量在主成分投影上的坐标,Sepal.WidthDim.1的坐标是-0.4601427,在Dim.2的坐标是0.88271627,根据这两个坐标就画出来Sepal.Width那根线了,以此类推~

变量和主成分的cos2可视化

cos2是coord的平方,也是表示主成分和变量间的相关性,所以首先可以画相关图:

library("corrplot")
## corrplot 0.92 loaded
corrplot(res.var$cos2, is.corr = F)

可以看到Petal.LengthPetal.WidthDim1的相关性比较强,Sepal.WidthDim2的相关性比较强。

通过fviz_cos2()查看变量在不同主成分的总和,以下是不同变量在第1和第2主成分的加和,如果把axes = 1:2改成axes = 1:4,就会变成都是1(这个数据最多4个主成分,同一变量的cos2在所有主成分的总和是1)。

fviz_cos2(pca.res, choice = "var", axes = 1:2)

可以通过col.var = "cos2"参数给不同变量按照cos2的数值大小上色:

fviz_pca_var(pca.res, col.var = "cos2",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), 
             repel = TRUE 
             )

# 黑白版本
fviz_pca_var(pca.res, alpha.var = "cos2")

变量对主成分的贡献可视化

res.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

首先也是可以通过画相关性图进行可视化:

library("corrplot")
corrplot(res.var$contrib, is.corr=FALSE) 

通过fviz_contrib()可视化变量对不同主成分的贡献:

# 对第1主成分的贡献
fviz_contrib(pca.res, choice = "var", axes = 1)

# 对第1和第2主成分的贡献
fviz_contrib(pca.res, choice = "var", axes = 1:2)

通过col.var = "contrib"参数给不同变量按照contrib的数值大小上色:

fviz_pca_var(pca.res, col.var = "contrib",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")
             )

Dimension description

res.desc <- dimdesc(pca.res, axes = c(1,2), proba = 0.05)
# Description of dimension 1
res.desc$Dim.1
## $quanti
##              correlation       p.value
## Petal.Length   0.9915552 3.369916e-133
## Petal.Width    0.9649790  6.609632e-88
## Sepal.Length   0.8901688  2.190813e-52
## Sepal.Width   -0.4601427  3.139724e-09
## 
## attr(,"class")
## [1] "condes" "list"

提取样本结果

使用get_pca_ind()提取样本结果,和变量结果类似:

res.ind <- get_pca_ind(pca.res)

head(res.ind$coord)          
##       Dim.1      Dim.2       Dim.3       Dim.4
## 1 -2.264703  0.4800266 -0.12770602 -0.02416820
## 2 -2.080961 -0.6741336 -0.23460885 -0.10300677
## 3 -2.364229 -0.3419080  0.04420148 -0.02837705
## 4 -2.299384 -0.5973945  0.09129011  0.06595556
## 5 -2.389842  0.6468354  0.01573820  0.03592281
## 6 -2.075631  1.4891775  0.02696829 -0.00660818
head(res.ind$contrib)      
##       Dim.1      Dim.2       Dim.3       Dim.4
## 1 1.1715796 0.16806554 0.074085470 0.018798188
## 2 0.9891845 0.33146674 0.250034006 0.341474919
## 3 1.2768164 0.08526419 0.008875320 0.025915633
## 4 1.2077372 0.26029781 0.037858004 0.140000650
## 5 1.3046313 0.30516562 0.001125175 0.041530572
## 6 0.9841236 1.61748779 0.003303827 0.001405371
head(res.ind$cos2)          
##       Dim.1      Dim.2        Dim.3        Dim.4
## 1 0.9539975 0.04286032 0.0030335249 1.086460e-04
## 2 0.8927725 0.09369248 0.0113475382 2.187482e-03
## 3 0.9790410 0.02047578 0.0003422122 1.410446e-04
## 4 0.9346682 0.06308947 0.0014732682 7.690193e-04
## 5 0.9315095 0.06823959 0.0000403979 2.104697e-04
## 6 0.6600989 0.33978301 0.0001114335 6.690714e-06

3个概念和变量的解释也是类似的,只不过上面是变量(列)和主成分的关系,现在是样本(观测,行)和主成分的关系。

样本结果可视化

样本的结果可视化可能是更常见的PCA图形,通过fviz_pca_ind()实现:

fviz_pca_ind(pca.res)

这个图是通过res.ind$coord里面的坐标实现的,其实就是不同样本在不同主成分的上面的得分score。

默认的可视化比较简陋,但是可以通过超多参数实现各种精细化的控制,比如把不同的属性映射给点的大小和颜色,实现各种花里胡哨的效果。

比如通过组别上色,就是大家最常见的PCA可视化图形:

# 经典图形,是不是很熟悉?
fviz_pca_ind(pca.res,
             geom.ind = "point", # 只显示点,不要文字
             col.ind = iris$Species, # 按照组别上色
             palette = c("#00AFBB", "#E7B800", "#FC4E07"), # 自己提供颜色,或者使用主题
             addEllipses = TRUE, # 添加置信椭圆
             legend.title = "Groups"
             )

样本的cos2可视化

使用方法和变量的cos2可视化基本一样,通过更改参数值即可实现:

fviz_pca_ind(pca.res,
             col.ind = "cos2", # 按照cos2上色
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE    
             )

可以更改点的大小、颜色等,只要设置合适的参数即可:

fviz_pca_ind(pca.res, 
             pointsize = "cos2", # 把cos2的大小映射给点的大小
             pointshape = 21, 
             fill = "#E7B800",
             repel = TRUE 
             )

同时更改点的大小和颜色当然也是支持的:

fviz_pca_ind(pca.res, 
             col.ind = "cos2", # 控制颜色
             pointsize = "contrib", # 控制大小
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE 
             )

使用参数choice = "ind"可视化样本对不同主成分的cos2:

# axes选择主成分
fviz_cos2(pca.res, choice = "ind", axes = 1:2)

样本对主成分的贡献可视化

和变量对主成分的贡献可视化非常类似,简单演示下:

fviz_contrib(pca.res, choice = "ind", axes = 1:2)

biplot

双标图…

同时展示变量和样本和主成分的关系,超级多的自定义可视化细节。

# 同时有箭头和椭圆
fviz_pca_biplot(pca.res, 
                col.ind = iris$Species, 
                palette = "jco", 
                addEllipses = TRUE, 
                label = "var",
                col.var = "black", 
                repel = TRUE,
                legend.title = "Species"
                ) 

fviz_pca_biplot(pca.res, 
                # 组别映射给点的填充色
                geom.ind = "point",
                pointshape = 21,
                pointsize = 2.5,
                fill.ind = iris$Species,
                col.ind = "black",
                # 通过自定义分组给变量上色
                col.var = factor(c("sepal", "sepal", "petal", "petal")),
                # 自定义图例标题
                legend.title = list(fill = "Species", color = "Clusters"),
                repel = TRUE        
             )+
  ggpubr::fill_palette("jco")+ # 选择点的填充色的配色
  ggpubr::color_palette("npg") # 选择变量颜色的配色

fviz_pca_biplot(pca.res, 
                # 自定义样本部分
                geom.ind = "point",
                fill.ind = iris$Species, # 填充色
                col.ind = "black", # 边框色
                pointshape = 21, # 点的形状
                pointsize = 2, 
                palette = "jco",
                addEllipses = TRUE,
                # 自定义变量部分
                alpha.var ="contrib", col.var = "contrib",
                gradient.cols = "RdYlBu",
                
                # 自定义图例标题
                legend.title = list(fill = "Species", color = "Contrib",
                                    alpha = "Contrib")
                )

fviz_xxx系列可视化函数底层是ggscatter的封装,这个函数来自ggpubr包,所有ggpubr支持的特性都可以给fviz_xxx函数使用,这也是这几个函数功能强大的原因,毕竟底层都是ggplot2!

下载会继续给大家介绍如何提取PCA的数据,并使用ggplot2可视化,以及三维PCA图的实现。

factoextrafactoMineR在聚类分析、主成分分析、因子分析等方面都可以使用。

在前几篇推文中也有很多介绍了

参考资料

http://www.sthda.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql密码忘记后怎么重置密码,mysql8之后有改动

mysql8之前的修改方式&#xff1a; 1.管理员身份打开cmd&#xff1a;然后关闭mysql&#xff0c;停止MySQL服务&#xff0c;输入 net stop mysql 停止服务 2.切换到MySQL的bin文件下&#xff0c;输入mysqld --console --skip-grant-tables --shared-memory。 3上个窗口保留不要…

四种类型自编码器AutoEncoder理解及代码实现

自编码器&#xff08;AE&#xff09; 自编码器的结构和思想 结构 自编码器是一种无监督的数据压缩和数据特征表达方法。自编码器是神经网络的一种&#xff0c;经过训练后的能尝试将输入复制到输出。自编码器由编码器和解码器组成。如下图所示&#xff1a; 自编码器指的是试图…

电脑键盘功能基础知识,快速入门,抓住这份详细教程

在互联网生活发达的今天&#xff0c;电脑已经成为了学习工作的必备工具。而用来操作电脑的关键&#xff0c;就是我们经常使用的键盘和鼠标。最近有不少的小伙伴来私信小编&#xff0c;希望小编做一个电脑键盘功能基础知识介绍的详细教程。这不&#xff0c;小编应大家要求&#…

视频编解码 - RTP 与 RTCP

目录 RTP 实时传输协议 RTCP协议 将H264 RTP打包 RTP 实时传输协议 音视频数据传输&#xff0c;先将原始数据经过编码压缩后&#xff0c;将码流打包成一个个RTP包&#xff0c;再将码流传输到接收端。 打包的作用 接收端要正确地使用这些音视频编码数据&#xff0c;不仅仅需…

深度学习之路=====12=====>>MNasNet(tensorflow2)

简介 原文&#xff1a; MnasNet: Platform-Aware Neural Architecture Search for Mobile 来源: CVPR2019 作者&#xff1a; Google (Mingxing Tan, Bo Chen, Ruoming Pang, Vijay Vasudevan, Mark Sandler, Andrew Howard, Quoc V. Le) 摘要: 使用神经结构搜索(neural archit…

界面控件DevExpress WPF的主题设计器,可轻松完成应用主题研发

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress WPF的The…

一文详解|高校到底如何开展数据分类分级?

数据安全是高校的生命线&#xff0c;在数据安全合规要求不断升级的大背景下&#xff0c;加强数据有效保护&#xff0c;确保数据安全共享应用&#xff0c;已成为高校信息化建设的前线。 安全高楼平地起&#xff0c;作为数据安全建设的基础工作&#xff0c;通过数据分类分级&…

1541_AURIX_TriCore内核架构_内核调试控制器CDC

全部学习汇总&#xff1a; GitHub - GreyZhang/g_tricore_architecture: some learning note about tricore architecture. 这一份笔记可能会是我近段时间来最后的一份内核学习笔记了。我看了下内核手册分为上下两部分&#xff0c;而下卷主要的内容其实是讲解指令集&#xff0c…

如何用CSS画一个三角形?

hello&#xff0c;大家好&#xff0c;最近在看前端的八股&#xff0c;里面有这样一道题&#xff0c;如何用CSS画出三角形&#xff1f;我想以这个题为例&#xff0c;仔细讲一下这个题的技巧&#xff0c;以及对这道题拓展一下&#xff0c;即如何画出圆形和椭圆形&#xff1f; 首…

GFS分布式

GFS是什么&#xff1f; 1.1 简单介绍 这个问题说大也大&#xff0c;说小也小。GFS是Google File System的缩写&#xff0c;字面意义上就是Google的文件系统&#xff0c;技术层面上来讲&#xff0c;GFS是Google在2003年前后创建的可扩展分布式文件系统 &#xff0c;用来满足 Goo…

SpringBoot 接收客户端提交数据/参数会使用到相关注解

目录 一.基本介绍 二.接收参数相关注解应用实例 1.需求: 2.应用实例演示 2.1演示PathVariable 使用 2.2.演示RequestHeader 使用 2.3演示RequestParam 使用 2.4演示CookieValue 使用 2.5演示RequestBody 使用 2.6演示RequestAttribute&#xff0c;SessionAttribute 使…

C语言基础知识

目录 第一章 C语言概述 第二章 数据类型 运算符 表达式 第三章 简单的C程序设计 第四章 选择循环结构 第五章 数组 ​第六章 函数 第七章 编译预处理 第八章 指针 第九章 结构体与共用体 第一章 C语言概述 C语言的特点&#xff1a; 语言简洁、紧凑&#xff1b;使用…

安卓实训作孽之Linux命令手册

文章目录前言演示效果项目地址实现UI进度条实现读取文件获取路径进度条刷新总结前言 开局之前先吐槽一句&#xff0c;NC学校&#xff0c;以及NC老师&#xff0c;还要搞两个作品&#xff0c;上午上课下午实训真牛皮&#xff08;XS&#xff09;。好了废话不多说我们开始吧&#…

进阶自动化测试,你一定要知道的...

自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化测试框架一般可以分为两个层次&#xff0c;上层是管理整个自动化测试的开发&a…

[Spring]第二篇:IOC控制反转

简单的说就是,创建对象的权利,或者是控制的位置,由JAVA代码转移到spring容器,由spring的容器控制对象的创建,就是控制反转. spring创建对象时,会读取配置文件,配置文件中主要配置接口和实现类的关系,每个接口对相应一个实现类,使用<bean>标签配置,<bean中的id可以随便…

微软S2C2F框架已被OpenSSF开源安全体系采用

近日&#xff0c;微软发布“安全供应链消费框架(Secure Supply Chain Consumption Framework&#xff0c;简称S2C2F)”1.1版本。该框架已被OpenSSF供应链完整性工作组采用。至此&#xff0c;OpenSSF开源软件评价相关的项目和指南已覆盖使用安全、关键性、基础设施安全、漏洞披露…

机器人导航必备的栅格地图数学模型及使用

机器人导航必备的栅格地图数学模型及使用占据栅格地图&#xff08;Occupancy Grid Map&#xff09;占用栅格地图基础概念占据栅格地图的数学模型ROS中使用OccupancyGrid占据栅格地图&#xff08;Occupancy Grid Map&#xff09; 占用栅格地图基础概念 上图就是一个ROS中的占据…

复旦大学-华盛顿大学EMBA项目位列全球第9,学术研究连续3年亚洲第一

2022年10月17日&#xff0c;英国《金融时报》&#xff08;FT&#xff09;发布全球EMBA项目排名&#xff0c;复旦大学-华盛顿大学EMBA项目位列全球第9位&#xff0c;学术研究连续3年亚洲第一&#xff0c;毕业生薪酬水平全球第六。    复旦大学-华盛顿大学EMBA项目是中国大陆…

JavaWeb三大组件之Filter

目录 1、Filter概述 2、Filter快速入门 2.1、开发步骤 2.2、代码演示 3、Filter执行流程​编辑 4、Filter拦截路径 5、过滤器链 5.1、概述 5.2、代码演示 5.3、问题 6、案例 6.1、需求 6.2、分析 6.3、代码实现 6.3.1、创建Filter 6.3.2、编写逻辑代码 6.3.3、…

SuperMap GIS管线数据处理QA

一、数据简介 传统的以二维平面展现网络数据的方式&#xff0c;在一定程度上限制了信息的表达&#xff0c;尤其是在复杂的空间位置关系上。三维网络是对现实中的网络的真实模拟&#xff0c;而非抽象模拟&#xff0c;因此能够全方位的展现信息。   例如&#xff0c;多层结构的…