利用spearman相关性分析是构建微生物共现网络常用的方法,需要计算每一对OTU的相关系数r和显著性p值,并对r和p值进行筛选来构建微生物网络,例如r>0.7和p<0.001。r和p阈值的确定往往具有一定的主观性,MENAP网站则使用RMT的方法来确定r的阈值,避免阈值确定的主观性问题。但MNAP使用的是网站模式,没有提供相应的R代码,这自然制约了我们对微生物数据的分析。不过我们可以利用RMThresold包实现RMT对相关性矩阵的阈值筛选,代码如下:
library(RMThreshold)
library(igraph)
# 取相关性矩阵R值
# otu_niche行为sample,列为OTUs
occor.r = abs(cor(otu_niche,method = "spearman"))
diag(occor.r) <- 0
rm.matrix.validation(occor.r,unfold.method = "spline")
#Get threshold by RMT
res <- rm.get.threshold(occor.r,discard.zeros = TRUE,
unfold.method = "spline")
thre <- (res$sse.chosen + res$p.ks.chosen)/2
cleaned.matrix <- rm.denoise.mat(occor.r, threshold = thre) #denoise adjacency matrix by threshold
cleaned.matrix <- rm.discard.zeros(cleaned.matrix) #delete all-zero rows
igraph = graph_from_adjacency_matrix(cleaned.matrix ,mode="undirected",weighted=TRUE,diag=FALSE)
write_graph(igraph, "~/Desktop/mygraph.graphml","graphml")
RMT进行阈值筛选的原理可参考:Molecular ecological network analyseshttps://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-13-113RMThresold包的使用可以参考:RMThreshold
http://matstat.org/content_en/RMT/RMThreshold_Intro.pdf
测试数据和代码可参考:
注意:最近有粉丝反映程序运行中出现 “选择的点不在2.5英寸内” 的警告,可能RMThreshold这个包没有跟上Rstudio的变化,使用旧版本Rstudio才运行成功,RStudio-1.3.1093。如果您在使用过程中出现问题可评论或者私信我,看到后会第一时间回复哈。