R-16s分析作图之NMDS非度量多维尺度分析

摘要:beta多样性分析网络上已经有很多,大部分出图都是基于R的基础包,很难看,而且很多图形不够完善,没有做方差分析,更没有将其直接输到图上,本文主要做NMDS分析并做一张完善的高质量图片,提取stress值,推荐适合NMDS结果的差异分析并通过命令展示在图形上,最后加上置信区间椭圆。


NMDS分析,网络上已近有很多相关教程分享其原理,与其他排序(PCA、PCoA、CCA、RDA)

方法的不同之处,简单来讲NMDS也是一种使用物种组成数据的排序称作非限制性排序;NMDS基于距离算法,优于PCA、PCoA、CCA、RDA的地方在于当样本或者物种数量过多的时候使用NMDS会更加准确;


基于R语言,开始作图:

  • 安装package,两个重要的包

  • install.packages("vegan")#微生态常用包,一定安装上

  • install.packages("ggplot2")

  • 调用package

  • library("vegan")

  • #设定工作路径

  • setwd("E:/马兄作图")

  • #读取数据,一份otu.table文件和一份分组信息文件

  • design<-read.table('design16s_otu_tablejidai.txt',header=T,sep="\t",row.names=1)

  • otu=read.table('16s_otu_tablejidai.txt',row.names=1, header=T,sep="\t")

  • #如果数据调整为列名是OTU,行名是样本名

  • otu=t(otu)

  • #查看一下

  • head(otu)

  • #标准化,当然method有很多,可以跟换?decostand查看其它method

  • vare.hel<-decostand(otu,method="hellinger")

  • #计算矩阵

  • vare.dis <- vegdist(vare.hel,method="bray")

  • #使用NMDS的方法

  • vare.mds <- metaMDS(vare.hel,distance = "bray")


到此分析过程就算完成了,使用基础包plot()作图当然已不是我们最佳的选择了,图形很基础,我就不展示了,下面基于ggplot做一张完善的图


  • #首先提取前两轴坐标

  • point = scores(vare.mds)

  • #将分组文件和得分文件合并

  • index = merge(design, point,by="row.names",all=F)


计算Stress值

Stress值是反映模型合适程度的指标,NMDS会多次打乱数据计算Stress值,知道找到最合适的模型,也就是最低的Stress值;理想状况下,Stress值为0,一般Stress值低于0.1较为合理(本数据这个值偏高一些)


  • vare.mds


结果输出中寻找下面stress结果:

#显著性检验;anosim本质是基于排名的算法更加适合NMDS

  • anosim.result<-anosim(vare.dis, design$SampleType,permutations =999)

  • summary(anosim.result)

结果输出,得到下面这两个值:


  • #tiff输出图形,适合大部分出版刊物,入门级别分辩率300,18*14的长宽;

  • tiff(file="beta_bray_NMDS.tif", res = 300, compression ="none", width=180,height=140,units= "mm")

  • #开始出图,将上面得到的三个指标在图中更换stress,R,p,不多说,代码如下:

  • library("ggplot2")

  • p = ggplot(index, aes(x=NMDS1, y=NMDS2, color=SampleType)) +

geom_point(alpha=.7, size=2) +

labs(x=paste("NMDS1"),

y=paste("NMDS1"),

title="")

  • #置信区间当然要加上,有三种方式,线条类型也可以更改

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

annotate("text",x=-1.07,y=-1,parse=TRUE,size=4,label="'R:'*0.7031",family="serif",fontface="italic",colour="darkred")+

annotate("text",x=-1.1,y=-0.9,parse=TRUE,size=4,label="'p:'*0.001",family="serif",fontface="italic",colour="darkred")+

annotate("text",x=-1,y=-0.78,parse=TRUE,size=4,label="'Stress:'*0.1208",family="serif",fontface="italic",colour="darkred")

  • dev.off()


成图展示:

当然这还达不到对于拥有轻微强迫症的我对于图行要求:

请看下一篇文章

(0)

相关推荐