R语言计算β多样性指数及分析

Python014

R语言计算β多样性指数及分析,第1张

计算β多样性指数需要用到phyloseq包。它的安装方式不同于简单的install.packages(“phyloseq”)

有两种方法可以安装

1.先安装BiocManager

install.packages("BiocManager")

library("BiocManager")

BiocManager::install("phyloseq")

library("phyloseq")

2.source("https://bioconductor.org/biocLite.R")

biocLite("phyloseq")

#安装phyloseq

library("phyloseq")

安装并加载了phyloseq包后,开始读取数据,前面计算α多样性,用到的是read.table……

qiimedata <- import_qiime(otufilename = "feature-table.taxonomy.txt", mapfilename = "mapping_file.txt", treefilename = "tree.rooted.nwk", refseqfilename = "dna-sequences.fasta")

#读取数据,参数都是文件名,注意加后缀

#otufilename指定out表格,mapfilename指定map文件(分组数据)

#treefilename指定有根进化树文件

#refseqfilename指定代表序列文件

otu<-qiimedata@[email protected]

#从qiimedata里面提取otu

sum_of_otus<-colSums(t(otu))

#t_转置,colsums计算列的和,即计算各个otu检测到的总序列数,为了筛掉一些总序列数过低的otu(可能是测序错误)

sum_of_otus

#查看otu总序列数

selected_otu<-names(sum_of_otus)[sum_of_otus>10]

#获取总序列数大于10的otu id

sub_qiimedata <- prune_taxa(selected_otu, qiimedata)

#筛选总序列数大于10的otu的phyloseq数据

weighted_unifrac<-distance(sub_qiimedata,method = 'wunifrac')

#计算样本间加权unifrac

unweighted_unifrac<-distance(sub_qiimedata,method = 'unifrac')

#计算样本间非加权unifrac

bray_curtis <- distance(sub_qiimedata, method='bray')

write.table(as.matrix(bray_curtis),"bray_curtis.txt",sep = '\t',quote = FALSE,col.names = NA)

#保存距离矩阵

#计算样本间Bray-Curtis距离矩阵,method 可选" wunifrac ", " unifrac " ,"jaccard"等

pcoa_of_bray_curtis<-ordinate(physeq=sub_qiimedata,distance = 'bray',method = "PCoA")

#基于Bray-Curtis距离矩阵的PCoA排序分析

p<-plot_ordination(sub_qiimedata, pcoa_of_bray_curtis, type="samples", color="Group1",shape = "Group1")

#将PCoA排序分析结果可视化

library("ggplot2")

p<-p+ scale_colour_manual(values=c("#DC143C","#808000","#00CED1")) + geom_point(size=2) +ggtitle("PCoA of Bray-Curtis distance")+theme(text = element_text(size = 15))

#修改图形大小,ggtitle加标题,stat_ellipse加椭圆

#用scale_colour_manual(values=c())自定义颜色,可查颜色的16进制对照表

p

nmds_of_bray_curtis<-ordinate(physeq=sub_qiimedata,distance = 'bray',method = "NMDS")

#基于Bray-Curtis距离矩阵的NMDS排序分析

p1<-plot_ordination(qiimedata, nmds_of_bray_curtis, type="samples", color="Group1")

#将NMDS排序分析结果可视化

# color=“Group1”指定不同分组的点染不同颜色

p1

p1<-p1+ geom_point(size=3) +ggtitle("NMDS of Bray-Curtis distance") + stat_ellipse()+theme(text = element_text(size = 15))

#对图片进行适当修饰, stat_ellipse()加椭圆, ggtitle()加标题

ggsave(plot = p1,“nmds_of_bary_curtis.pdf",dpi = 300,width

PCoA中的两个点距离,接近β多样性指数

PCA(Principal Components Analysis)即主成分分析,也称主分量分析或主成分回归分析法,首先利用线性变换,将数据变换到一个新的坐标系统中然后再利用降维的思想,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上。这种降维的思想首先减少数据集的维数,同时还保持数据集的对方差贡献最大的特征,最终使数据直观呈现在二维坐标系。

PCoA(Principal Co-ordinates Analysis)分析即主坐标分析,可呈现研究数据相似性或差异性的可视化坐标,是一种非约束性的数据降维分析方法,可用来研究样本群落组成的相似性或相异性。它与PCA类似,通过一系列的特征值和特征向量进行排序后,选择主要排在前几位的特征值,找到距离矩阵中最主要的坐标,结果是数据矩阵的一个旋转,它没有改变样本点之间的相互位置关系,只是改变了坐标系统。两者的区别为PCA是基于样本的相似系数矩阵(如欧式距离)来寻找主成分,而PCoA是基于距离矩阵(欧式距离以外的其他距离)来寻找主坐标。

NMDS图中两个点的距离的排序,接近β多样性指数的排序

相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。相关性分析旨在研究两个或两个以上随机变量之间相互依存关系的方向和密切程度。

一般来讲研究对象(样品或处理组)之间使用距离分析,而元素(物种或环境因子)之间进行相关性分析 。两个变量之间的相关性可以用简单相关系数(例如皮尔森相关系数等)进行表示,相关系数越接近1,两个元素相关性越大,相关系数越接近0,两个元素越独立。

Pearson相关系数是用于表示相关性大小的最常用指标,数值介于-1~1之间,越接近0相关性越低,越接近-1或1相关性越高。正负号表明相关方向,正号为正相关、负号为负相关。适用于两个正态分布的连续变量。

利用两变量的秩次大小来进行分析,属于非参数统计方法。适用于不满足Pearson相关系数正态分布要求的连续变量。也可以用于有序分类变量的之间的相关性测量。

Kendall's Tau相关系数是一种非参数检验,适用于两个有序分类变量。

此外衡量两个变量之间关系的方法还有:卡方检验、Fisher精确检验等。

Pearson、Spearman、Kendall相关系数都可以通过cor函数实现,cov协方差函数参数同cor函数。

ggcorrplot包内只有2个函数,一个cor_pmat()用于计算p值,一个ggcorrplot()用于绘图。ggcorrplot相当于精简版的corrplot包,只有主题更加丰富多样。

This function computes and returns the distance matrix computed by using the specified distance measure to compute the distances between the rows of a data matrix.

这个函数用特定的方法计算矩阵的行之间的距离,并返回距离矩阵。

scale是对矩阵的每一列进行标准化,如果要对行标准化需要先转置。如 heatmapdata <- t(scale(t(heatmapdata)))

R语言中实现层次聚类模型

大家好!在这篇文章中,我将向你展示如何在R中进行层次聚类。

什么是分层聚类?

分层聚类是一种可供选择的方法,它可以自下而上地构建层次结构,并且不需要我们事先指定聚类的数量。

该算法的工作原理如下:

将每个数据点放入其自己的群集中。

确定最近的两个群集并将它们组合成一个群集。

重复上述步骤,直到所有数据点位于一个群集中。

一旦完成,它通常由树状结构表示。

让我们看看分层聚类算法可以做得多好。我们可以使用hclust这个。hclust要求我们以距离矩阵的形式提供数据。我们可以通过使用dist。默认情况下,使用完整的链接方法。

这会生成以下树形图:

从图中我们可以看出,群集总数的最佳选择是3或4:

要做到这一点,我们可以使用所需数量的群集来切断树cutree。

现在,让我们将它与原始物种进行比较。

它看起来像算法成功地将物种setosa的所有花分为簇1,并将virginica分为簇2,但是与花斑杂交有困难。如果你看看显示不同物种的原始图,你可以理解为什么:

让我们看看我们是否可以通过使用不同的连接方法更好。这一次,我们将使用平均连接方法:

这给了我们以下树状图:

我们可以看到,群集数量的两个最佳选择是3或5.让我们用cutree它来将它降到3个群集。

我们可以看到,这一次,该算法在聚类数据方面做得更好,只有6个数据点出错。

我们可以如下绘制它与原始数据进行比较:

这给了我们下面的图表:

内部颜色与外部颜色不匹配的所有点都是不正确聚类的点。