使用ggClusterNet一条代码计算网络属性和节点性质 - taowenmicro/ggClusterNet GitHub Wiki

[toc]

本次更新

  • 去除对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")

image

节点性质计算

节点的性质可以映射到图形上。方便使用。


nodepro = node_properties(igraph)

dim(nodepro)

write.csv(nodepro,"nodeproperties.csv")

image

合并节点属性和物种和注释信息

# 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")


image

image

出图

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)

image

添加主编微信 加入群聊

image

关于微生信生物 你想要的都在这里

微生信生物

reference