【发布时间】:2020-05-28 16:24:01
【问题描述】:
我有所有分类级别的细菌 OTU 表。我想使用 igraph (或任何其他包)绘制网络。我从来没有创建过这样的情节,所以如果有人知道一些初学者的教程链接吗?或者,如果有人用脚本指导我,您的时间将不胜感激。谢谢!
【问题讨论】:
标签: r networking network-programming
我有所有分类级别的细菌 OTU 表。我想使用 igraph (或任何其他包)绘制网络。我从来没有创建过这样的情节,所以如果有人知道一些初学者的教程链接吗?或者,如果有人用脚本指导我,您的时间将不胜感激。谢谢!
【问题讨论】:
标签: r networking network-programming
edgeslist
您可能不需要第二个数据集,以指示您的节点的特征,aka 'nodes-list'。这些是第二个 data.frame(或矩阵),第一个 col 表示节点名称,其他 cols 表示每个节点的特征。 Igraph 中的节点列表必须指示每个单个节点。每个节点只能在节点列表中出现一次,并且不允许在节点列表中缺少边缘列表(“从”或“到”列)中的单个节点。此后,我们将此data.frame称为nodeslist。
然后,你必须用igraph::graph_from_data_frame(edgeslist, directed = F, vertices = nodeslist)创建一个Igraph对象
您可以访问该对象以编译一堆全局统计信息或获取与某些节点相关的一些新数据(例如,cliques <- igraph::largest_cliques(mygraph) 或 igraph::edge_density(mygraph, loops=T))
igraph::E(mygraph)$weight <- 1 或任何函数。尝试查找一些现有的教程,例如this one。
【讨论】:
我不明白你有什么数据,这里是一个小型网络分析的例程示例:
然后你必须建立你的边缘列表。就我而言,最常见的 小型网络(不需要大性能)的方法是制作一个data.frame 与tidyverse。在网络分析的每种情况下,您都需要一个边列表。它通常是一个 data.frame,其中包含您称为网络的 2 个实体之间的链接。 然后分析:
%>%) 的边列表发送到 igraph 并绘制:myedgeslist <- data.frame(from = c('man1', 'man2','man3', 'man3'),
to = c('man3','man1','man1', 'man2') )
mygraph <- myedgeslist %>% igraph::graph_from_data_frame(directed = T)
mygraph %>% igraph::plot.igraph()
在 3 个节点和 4 个链接之间绘制一个小型定向网络(Igraph 说:IGRAPH DN-- 3 4 -- 表示 DN 定向网络,3 个节点和 4 个链接)。
myedgeslist %>% group_by(to) %>% summarise(nlinksto= n(), n_nodes=n_distinct(from)) %>% arrange(desc(n_nodes)) 说“man1”是最中心的节点,因为有 2 个链接到他那里(而 man3 和 man2 有一个链接)。
同时,就像我上面所说的,阅读一些网络分析和计算指标的理论资料,以了解网络(中心性、互惠性......)。例如,
mygraph %>% igraph::edge_density()表示66%的有向链接都是在这个网络中实现的。
PS:绘制大型网络通常不是一个好主意,您必须将它们分成几个部分,或者通过全局/分组统计来恢复网络。
【讨论】: