前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >高维数据 | R语言绘图基础之主成分分析

高维数据 | R语言绘图基础之主成分分析

作者头像
黑妹的小屋
发布于 2020-08-06 07:05:15
发布于 2020-08-06 07:05:15
2K00
代码可运行
举报
运行总次数:0
代码可运行

高维数据可视化之主成分分析

在视觉性方面,人类普遍能够感知的是二维和三维空间。对于高维数据的可视化是将高维数据投影到二维或三维空间,去掉冗余属性,同时保留高维空间的数据和特征。说白了,高维数据的可视化就是使用降维度方法,主要分成线性和非线性两大类,关于非线性的非度量多维尺度分析NMDS见往期文章非度量多维尺度分析(NMDS),关于线性的PCA方法,见往期文章PCA做图最佳搭档-ggbiplot,本文主要针对迷弥小粉丝关于绘制线性PCA图数据处理过程遇到的问题进行记录。

01

原始数据

#迷弥小可爱提供的原始数据,为保密具体数值,此处公布随机数生成部分数据截图如下:

原始数据来看,变量“处理组”和“时间”属于中文字符型,需要将其改成英文的字符型“Treament”和“Time”,用reader时才可被RStudio识别。

02

ggbiplot绘制

#数据的导入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(readr)
Enzyme <- read_csv("~/Desktop/主成分分析/Enzyme.csv")
#导入
View(Enzyme)

#查看Enzyme,确保导入成功,不乱码。

#数据处理。

我们处理数据的目标是研究不同的Treament对MDA,LOX等指标的影响。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>df1<-Enzyme[,2:10]
#预处理,选取Enzyme数据框中210列的数据形成新的矩阵df1.
> df1
# A tibble: 36 x 9
    Time   MDA   LOX   APX   PAL   CAT   POD   PPO   TPC
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1    40    41    19    58    80 186.     40    20   965
 2    40    42    20    55   155 172.     34    37   955
 3    40    43    17    51    92 166.     30    36   937
 4    40    30    23    57   208 163.     85    23  1261
 5    40    34    24    58   180 146.     89    26  1249
 6    40    38    24    52    99 167.     81    21  1269
 7    40    40    27    55   150  70.7    81    16  1322
 8    40    30    30    54   104  56.7    81    16  1312
 9    40    43    29    55   167  73.7    82    22  1357
10    40    46    27    58    96  66.7    64    22  1080
# … with 26 more rows
>Enzyme1.pca <- prcomp(df1,scale. = TRUE)
#对给定的数据矩阵进行主成分分析,并将结果作为类prcomp的对象返回。
> Enzyme1.pca
Standard deviations (1, .., p=9):
[1] 2.0909293 1.1638511 1.0689045 0.9458037 0.7227202 0.6075112 0.5181985 0.2353166 0.1451410

Rotation (n x k) = (9 x 9):
             PC1         PC2         PC3          PC4         PC5         PC6         PC7
Time  0.46315503 -0.04916147  0.03637764  0.162115952  0.09831722 -0.05605495  0.15384446
MDA   0.43051775 -0.04773755 -0.14795093 -0.069491134 -0.36795168 -0.34716366 -0.30304858
LOX  -0.09369929  0.32940027 -0.72371726 -0.441381496 -0.08318472 -0.00732021  0.37465711
APX  -0.08716532 -0.75858481 -0.10162202 -0.059575764 -0.45541633  0.34852207  0.26596939
PAL   0.18847050 -0.30570836  0.24096297 -0.784312315  0.43453792 -0.08163434 -0.03770386
CAT  -0.37539362 -0.03778714  0.33391251 -0.026114784 -0.18066354 -0.69437542  0.46568301
POD   0.41870137  0.00242730  0.02591931  0.254736824  0.31195985  0.10630817  0.65436944
PPO   0.44279023 -0.08209132 -0.12802074 -0.008043973 -0.27235413 -0.34781106 -0.01258019
TPC  -0.18960223 -0.45795031 -0.50603522  0.299564950  0.49765782 -0.36567563 -0.16354171
              PC8         PC9
Time -0.423321246  0.73470281
MDA  -0.488029855 -0.44691662
LOX  -0.086060923  0.09687049
APX  -0.054174793  0.02299334
PAL   0.013325895 -0.02694037
CAT  -0.113141408  0.03184374
POD   0.038176838 -0.46993978
PPO   0.746837400  0.16634344
TPC  -0.009080942 -0.01764606

#ggbiplot绘图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> library(ggbiplot)
>ggbiplot(Enzyme1.pca,obs.scale = 1,var.scale = 1,
groups =Enzyme$Treament,ellipse = TRUE,circle = TRUE)
+scale_color_discrete(name="")
+theme(legend.direction = 'horizontal'
,legend.position = 'top')

03

fviz_pca_ind绘制-1

#数据处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df<-Enzyme[c(2,3,4,5,6,7,8,9,10)]
View(df)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> Enzyme.pca<-PCA(df,graph=FALSE)
> Enzyme.pca
**Results for the Principal Component Analysis (PCA)**
The analysis was performed on 36 individuals, described by 9 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"      

#fviz_pca_ind()绘图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> library(factoextra)
> library(FactoMineR)
> fviz_pca_ind(Enzyme.pca,geom.ind="point",pointsize=3,
pointshape=21,fill.ind=Enzyme$Treament,
palette=c("#00AFBB","#E7B800","#FC4E07","blue"),
addEllipses=TRUE,legend.titl="Groups",title="")
+theme_grey()

04

fviz_pca_ind绘制-2

#数据处理。

我们处理数据的目标是研究在不同的作用时间Time对MDA,LOX等指标的影响。若直接按照fviz_pca_ind绘制-1提供的方法绘制PCA,这时候会出现以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>fviz_pca_ind(Enzyme2.pca,geom.ind="point",pointsize=4,pointshape=21,fill.ind=Enzyme$Time,palette=c("#00AFBB","#E7B800","#FC4E07"),addEllipses=TRUE,legend.titl="Groups",title="")+theme_grey()
错误: Continuous value supplied to discrete scale

这是什么原因呢???我们来查看数据框

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>str(Enzyme$Time)
num [1:36] 40 40 40 40 40 40 40 40 40 40 ...
#查看数据框中某列的数值类型,你会发现是num数值型,
而fill.ind=Enzyme$Time这列数据需要因子向量型。
>as.character(Enzyme$Time)
 [1] "40"  "40"  "40"  "40"  "40"  "40"  "40"  "40"  "40"  "40"  "40"  "40"  "80"  "80"  "80" 
[16] "80"  "80"  "80"  "80"  "80"  "80"  "80"  "80"  "80"  "120" "120" "120" "120" "120" "120"
[31] "120" "120" "120" "120" "120" "120"
#将Time所在列的数据转换为字符型的因子向量。
>Enzyme$Time<-as.character(Enzyme$Time)
#将数据框中的某列的数值转换为因子向量,变量名仍为Time
>str(Enzyme$Time)
  chr [1:36] "40" "40" "40" "40" "40" "40" "40" "40" "40" "40" "40" "40" "80" "80" "80" "80" ...
#再次查看,Time的类型,发现修改成功,变成字符型chr了。

#绘图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> library(factoextra)
> library(FactoMineR)
> df2<-Enzyme[,3:10]
> df2
# A tibble: 36 x 8
     MDA   LOX   APX   PAL   CAT   POD   PPO   TPC
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1    41    19    58    80 186.     40    20   965
 2    42    20    55   155 172.     34    37   955
 3    43    17    51    92 166.     30    36   937
 4    30    23    57   208 163.     85    23  1261
 5    34    24    58   180 146.     89    26  1249
 6    38    24    52    99 167.     81    21  1269
 7    40    27    55   150  70.7    81    16  1322
 8    30    30    54   104  56.7    81    16  1312
 9    43    29    55   167  73.7    82    22  1357
10    46    27    58    96  66.7    64    22  1080
# … with 26 more rows
> Enzyme2.pca<-PCA(df2,graph=FALSE)

> Enzyme2.pca
**Results for the Principal Component Analysis (PCA)**
The analysis was performed on 36 individuals, described by 8 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"  
> fviz_pca_ind(Enzyme2.pca,geom.ind="point",
pointsize=4,pointshape=21,fill.ind=Enzyme$Time,
palette=c("#00AFBB","#E7B800","#FC4E07"),
addEllipses=TRUE,legend.titl="Groups",title="")
+theme_grey()

小结

ggbiplot:是ggplot2中绘制主成分的bioplot

groups:指可选因素的变量,即观测值所属的组。

prcomp():对给定的数据矩阵进行主成分分析,并将结果作为类prcomp的对象返回。

PCA():是FactoMineR包中主成分分析函数,能够对数据进行降维处理。

fviz_pca_ind():是factoextra包中的函数,能够以散点的形式展现数据分析结果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 菜鸟学数据分析之R语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
主成分分析PCA谱分解、奇异值分解SVD预测分析运动员表现数据和降维可视化
本文描述了如何 使用R执行主成分分析 ( PCA )。您将学习如何 使用 PCA_预测_ 新的个体和变量坐标。我们还将提供 _PCA 结果_背后的理论。
拓端
2022/03/05
1.3K0
主成分分析PCA谱分解、奇异值分解SVD预测分析运动员表现数据和降维可视化
R语言主成分分析可视化(颜值高,很详细)
网络上很多R语言教程都是基于R语言实战进行修改,今天为大家介绍更好用的R包,在之前聚类分析中也经常用到:factoextra和factoMineR,关于主成分分析的可视化,大家比较常见的可能是ggbiplot,这几个R包都挺不错,大家可以比较下。
医学和生信笔记
2023/02/14
1.2K0
R语言主成分分析可视化(颜值高,很详细)
R语言 主成分分析PCA(绘图+原理)
PCA 是一种较为常用的降维技术,PCA 的思想是将n维特征映射到k维上,这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征。在 PCA 中,数据从原来的坐标系转换到新的坐标系下,新的坐标系的选择与数据本身是密切相关的。其中,第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴选取的是与第一个坐标轴正交且具有最大方差的方向,依次类推,我们可以取到这样的k个坐标轴。
拴小林
2021/05/31
14.1K0
R语言 主成分分析PCA(绘图+原理)
PCA原理及实现-R
PCA是一种无参数的数据降维方法,常用的机器学习算法一种,这篇文章主要从PCA应用于解释两个方面介绍。关于PCA原理,详情这里
Jamesjin63
2022/10/25
4160
PCA原理及实现-R
R语言PCA分析_r语言可视化代码
如果不对数据进行scale处理,本身数值大的基因对主成分的贡献会大。如果关注的是变量的相对大小对样品分类的贡献,则应SCALE,以防数值高的变量导入的大方差引入的偏见。但是定标(scale)可能会有一些负面效果,因为定标后变量之间的权重就是变得相同。如果我们的变量中有噪音的话,我们就在无形中把噪音和信息的权重变得相同,但PCA本身无法区分信号和噪音。在这样的情形下,我们就不必做定标。
全栈程序员站长
2022/11/07
2.8K0
R语言PCA分析_r语言可视化代码
R语言中的主成分方法:PCA分析和可视化实用指南
主成分分析(PCA)允许我们总结和可视化包含多个相互关联的定量变量描述的个体/观察的数据集中的信息。每个变量都可以被视为不同的维度。如果你的数据集中有3个以上的变量,那么可视化多维超空间可能会非常困难。
简说基因
2025/03/13
3171
R语言中的主成分方法:PCA分析和可视化实用指南
主成分分析 factoextra
factoextra是一个R软件包,可以轻松提取和可视化探索性多变量数据分析的输出,其中包括: 主成分分析(PCA),用于通过在不丢失重要信息的情况下减少数据的维度来总结连续(即定量)多变量数据中包含的信息。 对应分析(CA),它是适用于分析由两个定性变量(或分类数据)形成的大型列联表的主成分分析的扩展。 多重对应分析(MCA),它是将CA改编为包含两个以上分类变量的数据表格。 多因素分析(MFA)专用于数据集,其中变量按组(定性和/或定量变量)组织。 分层多因素分析(HMFA):在数据组织为分
用户1359560
2018/08/27
1.9K0
主成分分析  factoextra
聚类分析和主成分分析
示例数据一:现有16种饮料的热量、咖啡因含量、钠含量和价格的数据,根据这4个变量对16饮料进行聚类
生信技能树
2019/12/23
2.7K0
聚类分析和主成分分析
【R语言】factoextra生成发表级PCA主成分分析图(三)
观察仔细的小伙伴可能发现,在上面这张图里面有三个点比其他点要大一些,其实这三个点是三个组的中心点。那么我们怎么去除各组的中心点呢?其实只需要修改mean.poin这个参数就可以了
生信交流平台
2022/09/21
5570
【R语言】factoextra生成发表级PCA主成分分析图(三)
主成分分析、K均值聚类R语言实现小实例
数据集下载链接 https://acadgildsite.s3.amazonaws.com/wordpress_images/r/wineDataset_Kmeans/Wine.csv
用户7010445
2020/03/03
1.5K0
PCA主成分分析实战和可视化 | 附R代码和测试数据
一文看懂PCA主成分分析中介绍了PCA分析的原理和分析的意义(基本简介如下,更多见博客),今天就用数据来实际操练一下。
生信宝典
2018/12/29
4.6K0
PCA主成分分析实战和可视化 | 附R代码和测试数据
R可视乎|主成分分析结果可视化
主成分分析法是很常用的一种数据降维方法[1]。该方法可以减少数据的维数,并保持对方差贡献最大的特征,相当于保留低阶主成分,忽略高阶主成分。
庄闪闪
2021/04/09
1.8K0
案例实战 | 主成分分析实现数据描述
在之前的文章中,我们已经详细介绍了主成分分析的原理,并用Python基于主成分分析的客户信贷评级进行实战。
萝 卜
2022/05/12
1.3K0
案例实战 | 主成分分析实现数据描述
【R语言】factoextra生成发表级PCA主成分分析图(一)
今天我们来给大家介绍另一个做PCA分析并绘图的R包factoextra,很多SCI文章中都用到了这个R包。换句话说这个R包画出来的PCA图是发表级的。
生信交流平台
2022/09/21
1.1K0
【R语言】factoextra生成发表级PCA主成分分析图(一)
高维数据的展示
降维方法分线性降维和非线性降维两大类,其中线性降维包括主成分分析PCA,多为尺度分析MDS,非矩阵分解NMF等;非线性方法包括等距特征映射和局部线性嵌套,tSNE等。
爱学习的小明明
2020/10/08
1.2K0
高维数据的展示
【R语言】factoextra生成发表级PCA主成分分析图(二)
主要讲了如何展示样本的主成分分析结果,即样本在新的空间中的分布情况,便于查看样本分群的结果。
生信交流平台
2022/09/21
7470
【R语言】factoextra生成发表级PCA主成分分析图(二)
R语言主成分分析
在医学研究中,为了客观、全面地分析问题,常要记录多个观察指标并考虑众多的影响因素,这样的数据虽然可以提供丰富的信息,但同时也使得数据的分析工作更趋复杂化。
医学和生信笔记
2023/02/14
5910
R语言主成分分析
R语言之主成分分析
注意事项:在主成分分析中变量的数量不得大于样本数量;如果样本量小于变量数,但是样本量足够大,那么也可以通过抽样实现主成分分析。
一粒沙
2019/07/31
9680
R语言之主成分分析
R tips:使用prcomp进行PCA降维
PCA分析和可视化常用的是FactoMineR和factoextra的组合,分析和出图都很方便,比如将iris数据集的四个参数降维(示例使用):
生信菜鸟团
2021/02/03
4.4K0
R tips:使用prcomp进行PCA降维
手把手 | 用StackOverflow访问数据实现主成分分析(PCA)
大数据文摘出品 编译:汪小七、张馨月、云舟 主成分分析(PCA:Principal Component Analysis)非常有助于我们理解高维数据,我利用Stack Overflow的每日访问数据对主成分分析进行了实践和探索,你可以在rstudio :: conf 2018上找到其中一篇演讲的录音。演讲的重点主要是我对于PCA的理解,而这篇文章中,我将主要介绍我是如何实现PCA的,以及我是如何制作演讲中使用到的图表的。 rstudio :: conf 2018 https://www.rstudio.co
大数据文摘
2018/06/29
6170
推荐阅读
相关推荐
主成分分析PCA谱分解、奇异值分解SVD预测分析运动员表现数据和降维可视化
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验