前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R实现PCA降维

R实现PCA降维

作者头像
生信编程日常
发布2020-04-01 15:50:42
发布2020-04-01 15:50:42
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

PCA(Principal Component Analysis),即主成分分析方法,是一种使用广泛的数据降维算法。详细的概念可以参照https://zhuanlan.zhihu.com/p/37777074 一般将多个样本降维就可以得到二维的分布,相似的样本成为一群,但有时候我们想知道哪些特征导致了这样的分群。 这里我们主要讨论怎么样用R实现以及提取我们需要的特征: 用R实现PCA有多个方法: prcomp() and princomp() [built-in R stats package], PCA() [FactoMineR package], dudi.pca() [ade4 package], and epPCA() [ExPosition package]

代码语言:javascript
代码运行次数:0
运行
复制
install.packages(c("FactoMineR", "factoextra"))
library("FactoMineR")
library("factoextra")
#输入的data.frame
data(decathlon2)
head(decathlon2)

image.png

decathlon2是一个27行,13列的data.frame,分析之前需要用scale()函数进行标准化,消除不同量纲之间的差距。在计算PCA的时候也有很多内置的scale参数,如:FactoMineR包里函数PCA(X, scale.unit = TRUE, ncp = 5, graph = TRUE)里面的 scale.unit = TRUE,则进行标准化,或者

代码语言:javascript
代码运行次数:0
运行
复制
library("FactoMineR")
decathlon2.active <- decathlon2[1:23, 1:10]
res.pca <- PCA(decathlon2.active, graph = T)

降维的分群图(这个没有明显的分群)

image.png

作为分群依据的特征值和特征向量

image.png

我们可以通过这些函数提取需要的数据: get_eigenvalue(res.pca): 提取特征值 fviz_eig(res.pca): 可视化特征值

代码语言:javascript
代码运行次数:0
运行
复制
library("factoextra")
eig.val <- get_eigenvalue(res.pca)
eig.val

image.png

从中我们看到前两个PC可以涵盖59.6%variance,一般用涵盖百分之八十以上的variance就够了,也可以用碎石图展示。

代码语言:javascript
代码运行次数:0
运行
复制
fviz_eig(res.pca, addlabels = TRUE, ylim = c(0, 50))

image.png

cos2cos2 (square cosine, squared coordinates) 能够代表某个PC的代表性的特征值:

代码语言:javascript
代码运行次数:0
运行
复制
var<-get_pca_var(res.pca)
var

image.png

代码语言:javascript
代码运行次数:0
运行
复制
head(var$cos2, 10)

image.png

代码语言:javascript
代码运行次数:0
运行
复制
fviz_pca_var(res.pca, col.var = "cos2",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), 
             repel = TRUE # Avoid text overlapping
             )

image.png

欢迎关注~

参考:http://www.sthda.com/english/articles/31-principal-component-methods-in-r-practical-guide/118-principal-component-analysis-in-r-prcomp-vs-princomp/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档