使用ggClusterNet一条代码计算网络属性和节点性质
本次更新
去除对microbiomeSeq的依赖:
因为这个包目前在github上,bioconductor上的不好用。
写在前面
网络整体属性
- 平均度(Average degree)和平均加权度(Average weighted degree)对网络整体而言,平均度(average degree)为该网络中所有节点的度的平均值;同样的,平均加权度(average weighted degree)为该网络中所有节点的加权度的平均值。平均度和平均加权度可反映网络整体的连通程度。
对于每个节点的度和加权度的定义,详见“节点和边特征”。
- 距离(Distance)和网络直径(Diameter)网络图中节点间的“距离”(distance)这一概念,被定义为节点间最短路径的长度(若不存在路径则为正无穷)。这一距离也常被称为“捷径距离”(geodesic distance),其中“捷径”(geodesic)是最短路径的另一个名字。网络图中最长的距离的值被称为图的“直径”(diameter)。网络直径可反映网络的规模。
图密度(Density)一个图的“密度”(density)是指实际出现的边与可能的边的频数之比,反映了网络的凝聚性特征。
聚类系数(clustering coefficient)相对频率也可以用于定义图中的“聚集性”(clustering)概念,反映了网络的凝聚性特征。
图分割(graph partitioning)和模块度(Modularity)图分割(graph partitioning)问题在复杂网络方面的文献中也常被称为社团发现(community detection)问题。
模块度(modularity)是社团发现中用来衡量社团划分质量的一种方法,一个相对好的结果在社团(community)内部的节点连接度较高,而在社团外部节点的连接度较低。
网络节点属性
网络图中的基本元素是节点和边。
节点和边通常会存在多种属性,代表了系统中元素的自身属性,以帮助我们更好地识别网络结构。
关于节点和边属性的简要描述同样可见“网络基础简介”。
通常情况下,这些属性往往是系统中元素所固有的,与这些元素本身有关。
除了固有属性,当元素存在于网络结构中时,会被赋予一些重要的“节点特征”;
同样地,边也被赋予了重要的“边特征”。
这些可帮助我们进一步分析网络的拓扑结构。
节点度(Degree):
节点的度(频率)分布具有不同的特征,即服从不同的分布模式。
网络度分布模式反映了该网络特殊的结构特征。
如微生物共发生网络的度一般符合幂律分布,大部分物种具有少量的连接数,极个别的物种具有非常多的连接数,表明微生物群落构建方式是非随机的过程。
接近中心性(Closeness centrality):
接近中心性它反映了网络中某一节点与其他节点之间的接近程度。
即对于一个节点,它距离其他节点越近,那么它的接近性中心性越大,也就越“重要”。
介数中心性(Betweenness centrality):
如果我们将这些路径视作进行通信所需的渠道,那么处于多条路径上的节点就是通信过程中的关键环节。
特征向量中心性(Eigenvector centrality):
如果一个节点的邻居中心性越高,节点本身的中心性也越高
实战
#--导入所需R包#-------
library(igraph)
library(network)
library(sna)
library(ggplot2)
library(ggrepel)
library(ggClusterNet)
library(tidyverse)
library("ggalt")
网络性质计算
# usethis::use_data(igraph, overwrite = TRUE)
data(igraph)
reslt = net_properties(igraph)
write.csv(reslt,"netproperties.csv")
节点性质计算
节点的性质可以映射到图形上。方便使用。
nodepro = node_properties(igraph)
dim(nodepro)
write.csv(nodepro,"nodeproperties.csv")
合并节点属性和物种和注释信息
# usethis::use_data(nodes, overwrite = TRUE)
# usethis::use_data(edge, overwrite = TRUE)
data(nodes)
data(edge)
#---------
nodeG = merge(nodes,nodepro,by = "row.names",all =FALSE)
dim(nodeG)
head(nodeG)
write.csv(nodeG,"nodeproperties1.csv")
出图
pnet <- ggplot() + geom_segment(aes(x = X1, y = Y1, xend = X2, yend = Y2,color = as.factor(wei_label)),
data = edge, size = 0.5) +
geom_point(aes(X1, X2,fill = Phylum,size = igraph.degree),pch = 21, data = nodeG) +
scale_colour_brewer(palette = "Set1") +
scale_x_continuous(breaks = NULL) + scale_y_continuous(breaks = NULL) +
# labs( title = paste(layout,"network",sep = "_"))+
# geom_text_repel(aes(X1, X2,label=Phylum),size=4, data = plotcord)+
# discard default grid + titles in ggplot2
theme(panel.background = element_blank()) +
# theme(legend.position = "none") +
theme(axis.title.x = element_blank(), axis.title.y = element_blank()) +
theme(legend.background = element_rect(colour = NA)) +
theme(panel.background = element_rect(fill = "white", colour = NA)) +
theme(panel.grid.minor = element_blank(), panel.grid.major = element_blank())
pnet
# pnet <- pnet + geom_text_repel(aes(X1, X2,label=elements),size=4, data = nodes)