加载中…

加载中...

主成分分析(PCA)和偏最小二乘法判别分析(PLS-DA)在R中的实现

转载 2016-04-06 20:28:40
标签: pls-da pca 偏最小二乘判别分析 主成分分析

一.概念简述:

主成分分析的思想主要是将高维数据降到低维数据,俗称降维。但是,如果你的数据行数小于列数,或者在你的数据中各列数之间本身相关性就不大,那么这时候你会发现使用主成分分析的效果其实不是很好。这个时候,我们可以考虑一下偏最小二乘法判别分析,该方法是结合多元线性回归和主成分分析的优点,在很大程度上解决了上述所说的问题。(建了个群,交流学习哈: 553621380。

也可到楼主自己编写的网站上去查看更多内容,网址:http://www.omicsolution.org/wu-kong-beta-linux/main/

二.代码实现。

比如说我们现在有这样的一批数据,取56个人(正常组:28,病灶组(胰腺癌):28)胰腺组织,做蛋白质组学数据分析。上样,跑质谱,搜库(这些步骤非本节内容,在此省略)。得到最后如下数据:

第一列是鉴定到蛋白质的名字,其他列就是对应样本下的表达量。

1.     PCA分析

#读取数据

data<-read.delim("clipboard",header=T)

head(data)

#转换成矩阵

datat<-data[,-1]

row.names(datat)<-data[,1]

#PCA分析

pr<-princomp(datat,cor=T)

summary(pr,loadings=T)

load<-loadings(pr)

col<-rep(c("red","blue"),c(28,28))

#画出PCA分析结果2维图(选前两个主成分)

plot(load[,1:2],col=col, pch=16, main="PCA analysis", xlab=paste("PC1(", round(((pr$sdev[1])^2/sum((pr$sdev)^2)),2)*100,"%)",sep=""),ylab=paste("PC2(",round(((pr$sdev[2])^2/sum((pr$sdev)^2)),2)*100,"%)",sep=""))

text(load[,1:2],row.names(load),adj=c(0.5,-1),cex=0.8,col=col)

abline(h=0,lty=3)

abline(v=-0.12,lty=3)


得到结果图如下:

我们发现,前两个主成分的累积贡献率可以达到84%,效果还算不错。

2.     PLS-DA分析

#加载相应的安装包​,没有的话进行:install.packages("mixOmics")

library(mixOmics)

#读取数据

data<-read.delim("clipboard",header=T)

head(data)

#转换成矩阵​

datat<-data[,-1]

row.names(datat)<-data[,1]

datatm<-as.matrix(datat)

XXt<-t(datatm)

YY<-c(rep(c("N","T"),c(28,28)))#names(datat)

#PLS-DA分析,这里也是选取2个主成分​

plsda.datatm <-plsda(XXt, YY, ncomp = 2)

plotIndiv(plsda.datatm,ind.names = T, plot.ellipse = TRUE, add.legend =TRUE,style="ggplot2")


建了个群,交流学习哈: 553621380。

阅读(0) 评论(0) 收藏(0) 转载(0) 举报/Report

评论

重要提示:警惕虚假中奖信息
0条评论展开
相关阅读
加载中,请稍后
璇楃洓
  • 博客等级:
  • 博客积分:0
  • 博客访问:61,714
  • 关注人气:0
  • 荣誉徽章:

相关博文

推荐博文

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有