

Link: https://www.nature.com/articles/s41467-019-11787-5
Journal: Nature Communications
IF: 11.878
Published: 23 August 2019
First author: Weibing Xun
Corresponding author: Qirong Shen & Ruifu Zhang
Department: Nanjing Agricultural University (南京农业大学)
很多研究表明了α多样性对生态功能具有正向的影响。但是目前对β多样性这方面的研究还很少。
本文针对确定性或随机性的群落构建组成的细菌群落的β多样性与生态功能之间的关系进行了研究。
结果表明随机过程在高多样性群落中占主导地位,确定性过程在低多样性群落中占主导地位,这与特定细菌类群相关的特殊功能的减少有关。
作者认为低多样性的确定性群落装配过程可能限制群落功能。
建立了252个土壤微环境实验(Soil microcosms),包括:
5个pH梯度(4.5,5.5, 6.5, 7.5, and 8.5);
土壤稀释为4个梯度;
2种土壤类型混合:黑土和红土;
单独的两种土壤;
6个技术重复;
[(5 pH levels × 4 dilution levels × 2 soil types +2 initial soils) × 6 replicates]
DNA扩增16S rRNA gene V4区。Illumina MiSeq测序,UPARSE pipeline分析,去掉singleton。对于16S数据,resample number为11,020。
与此同时,Illumina HiSeq 2000 platform进行宏基因组测序。
结果

NMDS:
pH、土壤类型、对土壤进行稀释都会改变群落的结构。


|βNTI|<2为随机过程;反之为确定性过程。
稀释土壤、改变pH对βNTI都会有影响。其中shannon和βNTI呈负相关关系。

随着稀释倍数增加,群落多样性减少,趋于确定性过程。群落中具有特异性功能的菌群丰度下降,而具有广泛功能的丰度上升。

不同PH条件下群落装配过程的不同,及功能性的差异。pH从中性向极端变化时,群落趋于确定性过程。多样性越高越趋于随机性过程。
参考材料中有计算βNTI的代码可供参考:
rm(list=ls())
data.set.name = 'test'
setwd("E:/NTI_files")
library(picante)
# read in a rarefied OTU table with all OTUs have abundance of 1 or greater.
otu = as.data.frame(read.table(paste(data.set.name,"_rarefied_otu.txt",sep=""),header=T,row.names=1));
# species as rows, samples as columns for otu table
# read in phylo and match
phylowb = read.tree(paste(data.set.name,"_phylo_tree.nwk",sep=""))
phylowb
match.phylowb.otu = match.phylowb.data(phylowb, t(otu))
str(match.phylowb.otu)
write.tree(match.phylowb.otu$phy,paste(data.set.name,"_matched_tree_to_rarified_ot u.tre",sep=""))
phylowbMatch = read.tree(paste(data.set.name,"_tree_matched_to_rarified_otu_table.tre",sep=""))
phyloMatch
match.phylowbMatch.otu = match.phylowbMatch.data(phylowbMatch, t(otu)) str(match.phylowbMatch.otu)
beta.mntd.weighted = as.matrix(comdistnt(t(match.phylowbMatch.otu$data),cophenetic(match.phylowbMat ch.otu$phy),abundance.weighted=T));
dim(beta.mntd.weighted);
beta.mntd.weighted[1:5,1:5];
write.csv(beta.mntd.weighted,'betaMNTD_weighted.csv',quote=F);
identical(colnames(match.phylowbMatch.otu$data),colnames(beta.mntd.weighted));
# Just checking and should be TRUE
identical(colnames(match.phylowbMatch.otu$data),rownames(beta.mntd.weighted));
# Just checking and should be TRUE
# calculate randomized betaMNTD
beta.reps = 999; # number of randomizations
random.weighted.bMNTD.comp = array(c(-999),dim=c(ncol(match.phylowbMatch.otu$data),ncol(match.phylowbMatch. otu$data),beta.reps));
dim(random.weighted.bMNTD.comp);
for (rep in 1:beta.reps) {
random.weighted.bMNTD.comp[,,rep] = as.matrix(comdistnt(t(match.phylowbMatch.otu$data),taxaShuffle(cophenetic(match. phylowbMatch.otu$phy)),abundance.weighted=T,exclude.conspecifics = F));
print(c(date(),rep));
}
weighted.bNTI = matrix(c(NA),nrow=ncol(match.phylowbMatch.otu$data),ncol=ncol(match.phylowb Match.otu$data));
dim(weighted.bNTI);
for (columns in 1:(ncol(match.phylowbMatch.otu$data)-1)) {
for (rows in (columns+1):ncol(match.phylowbMatch.otu$data)) {
random.vals = random.weighted.bMNTD.comp[rows,columns,];
weighted.bNTI[rows,columns] = (beta.mntd.weighted[rows,columns] - mean(random.vals)) / sd(random.vals);
rm("random.vals");
};
};
rownames(weighted.bNTI) = colnames(match.phylowbMatch.otu$data);
colnames(weighted.bNTI) = colnames(match.phylowbMatch.otu$data);
weighted.bNTI;
write.csv(weighted.bNTI,"weighted_bNTI.csv",quote=F); END