分享

使用ggClusterNet一条代码计算网络属性和节点性质

 微生信生物 2021-01-16

本次更新

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

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多