使用ggClusterNet一条代码计算网络模块内连通度(Zi)和模块间连通度(Pi)
写在前面
之前我看到microbiomeSeq编写了这些函数,同时将zipi plot做的更加精细一些,但是代码实在是太难用了,尤其是包冲突事件实在是太多,所以我不得已将他的函数做了修改,并放到ggClusterNet包中,后面我会直接重写到ggClusterNet中,方便大家使用。
模块内连通度(Zi)和模块间连通度(Pi)的定义
依据节点的的拓扑特征可将节点属性分为4种类型,包括:Module hubs(模块中心点,在模块内部具有高连通度的节点,Zi > 2.5且Pi < 0.62),Connectors(连接节点,在两个模块之间具有高连通度的节点,Zi < 2.5且Pi > 0.62),Network hubs(网路中心点,在整个网络中具有高连通度的节点,Zi > 2.5且Pi > 0.62)以及Peripherals(外围节点,在模块内部和模块之间均不具有高连通度的节点,Zi < 2.5且Pi <0.62)。
基于模块内连通度(Zi)和模块间连通度(Pi)的网络核心节点判别方法得到了广泛的应用。例如,微生物共发生网络一般可以被划分成多个模块,模块是网络中高度连接的区域,模块可能反应了栖息地的异质性、系统发育上亲缘关系较近物种的聚集、生态位的重叠和物种的共进化,被认为是系统发育、进化或功能上独立的单元(Olesen et al. 2007)。在生态网络模块中识别的关键节点,往往代表了在维持微生物群落结构稳定性上可能起重要作用关键物种。Shi等(2016)在野燕麦根际微生物共发生网络中通过模块内连通度(Zi)和模块间连通度(Pi)的概念寻找核心微生物物种就是依据此原理。(摘抄自生信小白鱼)
输入文件
#--导入所需R包#-------
library(igraph)
library(psych)
library(ggClusterNet)
library(sna)
#-----导入数据#-------
ps = readRDS("../ori_data/ps_liu.rds")
ps
corMicro函数用于计算相关
按照丰度过滤微生物表格,并却计算相关矩阵,按照指定的阈值挑选矩阵中展示的数值。
library("igraph")
library("ggplot2")
#-----微生物网络构建参数设置#----
#-提取丰度前百分之多少的otu进行构建网络
# N = 0.02
# r.threshold=0.6
# p.threshold=0.05
#----------计算相关#----
result = corMicro (ps = ps,N = 0.02,r.threshold=0.6,p.threshold=0.05,method = "pearson")
#--提取相关矩阵
cor = result[[1]]
dim(cor)
# head(cor)
nodeEdge函数生成节点和边文件
result4 = nodeEdge(cor = cor)
#提取变文件
edge = result4[[1]]
dim(edge)
#--提取节点文件
node = result4[[2]]
dim(node)
#--这里将为0的也添加进去了,但是这些边其实都是离散的。
igraph = igraph::graph_from_data_frame(edge, directed = FALSE, vertices = node)data("igraph")
# library(microbiomeSeq)
res = ZiPiPlot(igraph = igraph,method = "cluster_fast_greedy")
p <- res[[1]]
ggsave("1.png",p)
head(res[[2]])