16是分析之主成分分析(PCA)实战部分

下面我们来做PCA分析,来做出很好看的图片

之前在插几句:非约束排序,不做统计检验,不能做!

# 安装包ggbiplot包

#install.packages("devtools",repo="http://cran.us.r-project.org")

#library(devtools)

#install_github("vqv/ggbiplot")

library(ggbiplot)

#修改工作目录

setwd("E:/Shared_Folder/HG_usearch_HG")

#导入需要的作图文件

design =read.table("map_lxdjhg.txt", header=T, row.names= 1,sep="\t")

head(design)

# 读取OTU表并进行数据整理

otu_table =read.delim("otu_table8825.txt", row.names= 1,  header=T, sep="\t")

head(otu_table)

# 过滤数据并排序

sub_design =design[rownames(design) %in% colnames(otu_table),]

count = otu_table[,rownames(sub_design)]

以上我们导入数据并整理数据,接下来我们开始分析PCA:

函数prcomp默认选项center=T(当然中心化是一定要做的),但是不做标准化,我们调整参数scale. = TRUE,将方差缩放为单位方差最为合理

# 进行PCA分析

otu.pca <-prcomp(t(count), scale. = TRUE)

这里我们使用的ggbiplot,obs.scale = 1, var.scale = 1,这两个参数表示我们使用标尺出图,ellipse= TRUE我们添加椭圆置信区间默认是0.95置信区间,可以修改吗?对不起,不行,写死了,已经在函数里面;

p=ggbiplot(otu.pca,obs.scale = 1, var.scale = 1,

groups = sub_design$SampleType,ellipse = TRUE,var.axes = T,circle = TRUE)+

scale_color_discrete(name = '') +

theme(legend.direction = 'horizontal',legend.position = 'top')

#

p

下面这幅图算是将PCA的所有要素展示的非常好了,这里有一个新的东西,之前也没说过,就是:

平衡贡献圆(circle of equilibrium contribution),它的半径表示变量的向量长度对排序的平均贡献率,可以这么讲,如果变量的箭头线长度长于圆的半径,则它对排序空间的贡献大于变量的平均贡献率;

我们使用扩增子16s,未免otu数目过多,什么都看不清楚,自然需要我们将变量减少

# 因此我们首先关注一下高丰度菌的影响

# 转换原始数据为百分比

norm =t(t(count)/colSums(count,na=T)) * 100 # normalization to total 100

head(norm)

# 筛选mad值大于0.5的OTU

norm2 =norm[apply(norm,1,mean)>1,]

dim(norm2)

#重新计算PCA

otu.pca <-prcomp(t(norm2))

p<-ggbiplot(otu.pca,obs.scale = 1, var.scale = 1,

groups = sub_design$SampleType,ellipse = TRUE,var.axes = T,circle = TRUE)

p

#挑选0.001丰度以上的菌

norm3 =norm[apply(norm,1,mean)>0.1,]

otu.pca1 <-prcomp(t(norm3))

p<-ggbiplot(otu.pca1,obs.scale = 1, var.scale = 1,

groups = sub_design$SampleType,ellipse = TRUE,var.axes = T,circle = TRUE)

p

#当然我们仅仅展示样品点坐标也是可以的只需修改var.axes = F

p<-ggbiplot(otu.pca1,obs.scale = 1, var.scale = 1,

groups = sub_design$SampleType, ellipse= TRUE,var.axes = F)

#可以修改主题,我修改了一份自己觉得美观的主题(我没有什么审美),大家有需要可以借鉴

p+theme_bw()+scale_colour_manual(values= mi)+labs(x=paste("PC 1 (", 61.7, "%)", sep=""),

y=paste("PC 2 (", 14.5,"%)", sep=""))+

labs(title = "PCA")+

theme(plot.title = element_text(hjust =0.5))+

guides(color=guide_legend(title =NULL),shape=guide_legend(title = NULL))+

geom_hline(yintercept=0) +geom_vline(xintercept=0)

ggbiplot是一款PCA分析结果可视化的R包工具,但是毕竟也有很多局限在里面的,比如:

我需要修改样品表示方式,我需要化多个置信区间,可能就不可以实现,所以将PCA分析结果提取出来,使用ggplot作图系统来作图会更加自由一些;

下面我们开始提取主成分分析结果

#现在我们来提取作图坐标

#首先是样品排序轴坐标

predict(otu.pca)

#也可以使用下面这条命令提取

yangpin<-otu.pca$x

yangpin=as.data.frame(yangpin)

yangpin$SampleType=sub_design$SampleType

#提取荷载坐标

bianliang<-otu.pca$rotation

bianliang=as.data.frame(bianliang)

#提取特征根,这里提供的并不是特征值而是标准差,需要求其平方才是特征值

eig=otu.pca$sdev

eig=eig*eig

#在这里我设定了随机种子,方便两种形式图形比较

set.seed(10)

ggplot(data=yangpin,aes(x=yangpin$PC1,y=yangpin$PC2,group=SampleType,color=SampleType))+geom_point()+

stat_ellipse(type = "t", linetype =2)+

labs(x=paste("PC 1 (", format(100 *eig[1] / sum(eig), digits=4), "%)", sep=""),

y=paste("PC 2 (", format(100 *eig[2] / sum(eig), digits=4), "%)", sep=""))+

labs(title = "PCA")

#########我们将载荷也画上去

p+stat_ellipse(data=yangpin,aes(group=SampleType,color=SampleType),level = 0.95,type ="t", linetype = 2)+

geom_point(data=bianliang,aes(x=PC1,y=PC2),size=2)+

geom_text(data=bianliang,aes(x=PC1,y=PC2,label=spece),color="blue",hjust=1.2,vjust=-1.3,size=3)

这里我们没有像ggbioplot一样画一个箭头,因为我没有找到简单的方法完成这件事,总会这样的,如果大家有好的办法,可以留言给我最好了,我将不胜感激。


最后还是那句话:学习永无止境,分享永不停歇!

(0)

相关推荐

  • 从实践的角度理解主成分分析

    主成分分析是提高机器学习算法处理大量数据和特征的性能的最常用方法之一.然而,有时PCA可能太复杂,太技术化,甚至太乏味,无法正确理解基本原理,因此,我决定写这篇文章,以实际的方式阐明每一步,并易于初学 ...

  • 【直播】我的基因组55:简单的PCA分析千人基因组的人群分布

    好久不见,我们的直播又开始啦!今天,我们主要讲的是人群分布,先用简单的PCA来分析一下千人基因组的人群分布吧! PCA分析,就是主成分分析,我博客有讲过(点击最底部的阅读原文或复制链接http://w ...

  • R数据分析:主成分分析及可视化

    Principal Component Analysis (PCA) is a useful technique for exploratory data analysis, allowing you ...

  • 【R分享|实战】PCA分析与可视化

    " 不求做的最好,但求做的更好."   --科白君 "R实战"专题·第17篇   编辑 | 科白维尼   4791字 |12分钟阅读 本期推送内容 最近我们分享 ...

  • 16是分析之主成分分析实战部分

    下面我们来做PCA分析,来做出很好看的图片 之前在插几句:非约束排序,不做统计检验,不能做! # 安装包ggbiplot包 #install.packages("devtools" ...

  • 打板必学:逆向思维角度分析涨停龙虎榜的实战案例图解

    今天给大家的这个案例,可能是有的朋友不愿意我公开的干货. 龙虎榜是中国A股特有的一道风景线. 很多朋友把龙虎榜看得很神秘. 有的朋友每天都在看龙虎榜,特别是当自己买的股上龙虎榜后,发现有一线游资也买入 ...

  • 【操作建议】2018.03.16行情分析报告

    2018.03.16行情分析报告 消息面: 因美元汇率上涨,导致投资者对黄金的需求下降,周四黄金价格下跌.周四公布的数据显示,美国2月进口物价指数月率录得0.4%,好于预期的0.2%:美国3月纽约联储 ...

  • 【操作建议】2018.04.16行情分析报告

    2018.04.16行情分析报告 消息面: 上周五(4月13日),现货黄金在欧市盘中一度遭遇8亿美元卖单砸盘闪崩6美元,最低下探至1332.9美元/盎司:现货白银触及16.448美元/盎司.不过,随着 ...

  • 权威16型人格分析,你属于哪一种?

    叮叮叮,我这个大大大懒蛋终于开始认认真真的码一篇文章了, (抱歉大多数时候我确实都在应付,毕竟做咨询很累了,打字更辛苦) 今天我大致的分析一下16种基础人格.关于他们的思维特点,关于他们的爱情.为什么 ...

  • 通俗易懂的讲解奇异值分解(SVD)和主成分分析(PCA)

    图片来自Unsplash上的Dave 0.本教程包含以下内容 特征分解 对称矩阵的特征分解 奇异值分解(The Singular Value Decomposition,SVD) 主成分分析(Prin ...

  • 主成分分析(PCA)原理解读

    我们做16s数据分析,基础就是排序的聚类,实战当然使我们的目的,但是如果我们连基本的概念,比如特征值,特征向量,标尺,关联测度,再基础的比如多元多重回归,方差,距离都不太清楚的话,分析起来就像是无源之 ...

  • Python用稀疏、高斯随机投影和主成分分析PCA对MNIST手写数字数据进行降维可视化

    原文链接:http://tecdat.cn/?p=23599 降维是在我们处理包含过多特征数据的大型数据集时使用的,提高计算速度,减少模型大小,并以更好的方式将巨大的数据集可视化.这种方法的目的是保留 ...

  • 胼胝体梗死16例分析

    胼胝体是连接两侧大脑半球的连接纤维,是神经系统的重要结构,分为嘴部.膝部.体部及压部四部分.胼胝体主要功能是协同两大脑半球间的活动,传递视觉.听觉.语言等信息.胼胝体梗死发病率较低,临床表现复杂多样. ...