igraph 中的微生物网络分析
Microbial Network Analysis in igraph
我在所有分类水平上都有细菌 OTU table。我想使用 igraph(或任何其他包)绘制网络。我从来没有创建过这样的情节所以如果有人知道一些初学者教程 link 吗?或者,如果有人用脚本指导我,我将不胜感激。谢谢!
- 网络分析中的关系数据集至少由一个data.frame(或矩阵)组成,它描述了links并且至少包含2列,以表明'from' 和 'to' link 在 data.frame 的前 2 个列上。此 'edges list' 的其他列表示每个 link 的特征。此后,我们称其为 data.frame
edgeslist
您可能不需要第二个数据集,以指示节点的特征,aka 'nodes-list'。这些是第二个 data.frame(或矩阵),第一个列表示节点名称,其他列表示每个节点的特征。 Igraph 中的节点列表必须指示每个单个节点。每个节点只能在节点列表中出现一次,并且边缘列表('from' 或 'to' 列)中的节点不允许在节点列表中丢失。此后,我们称其为 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
或任何函数。
- 我建议使用 edge-list 和 tidyverse,以便进行组统计。
尝试找到一些现有的教程,例如 this one。
我不明白你有什么数据,这里是一个小型网络分析例程的例子:
- 您首先必须定义您要分析的 link 类型(例如,什么关系?边是否有向 - 并且可能是相互的 - 或不是?节点和边的哪些特征是相关的?) .
然后你必须建立你的边缘列表。就我而言,最常见的
小型网络(不需要大性能)的方法是制作一个 data.frame
与tidyverse。在网络分析的每种情况下,您都需要一个边列表。它通常是 data.frame 和您称为网络的 2 个实体之间的 link。
然后分析:
- FOR SMALL GRAPH ONLY,你从绘图开始,阅读情节。此后,边列表发送到 igraph 并绘制,假设您需要 tidyverse 语法(
%>%
):
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个links之间绘制一个小型定向网络(Igraph说:IGRAPH DN-- 3 4 --
表示DN定向网络,3个节点和4 links).
- 同时,您必须进行一些 tidyverse 组统计,例如
myedgeslist %>% group_by(to) %>% summarise(nlinksto= n(), n_nodes=n_distinct(from)) %>% arrange(desc(n_nodes))
说 'man1' 是最中心的节点,因为 2 link 去他那里(相对于 man3 和 man2 一个 link) .
同时,就像我上面说的,阅读一些网络分析和计算指标的理论知识来理解网络(中心性,互惠性......)。例如,
mygraph %>% igraph::edge_density()
表示66%的定向link都在这个网络中实现了。
PS: 绘制大型网络通常是个坏主意,你必须将它们分成几部分或通过 global/grouped 统计恢复网络.
我在所有分类水平上都有细菌 OTU table。我想使用 igraph(或任何其他包)绘制网络。我从来没有创建过这样的情节所以如果有人知道一些初学者教程 link 吗?或者,如果有人用脚本指导我,我将不胜感激。谢谢!
- 网络分析中的关系数据集至少由一个data.frame(或矩阵)组成,它描述了links并且至少包含2列,以表明'from' 和 'to' link 在 data.frame 的前 2 个列上。此 'edges list' 的其他列表示每个 link 的特征。此后,我们称其为 data.frame
edgeslist
您可能不需要第二个数据集,以指示节点的特征,aka 'nodes-list'。这些是第二个 data.frame(或矩阵),第一个列表示节点名称,其他列表示每个节点的特征。 Igraph 中的节点列表必须指示每个单个节点。每个节点只能在节点列表中出现一次,并且边缘列表('from' 或 'to' 列)中的节点不允许在节点列表中丢失。此后,我们称其为 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
或任何函数。 - 我建议使用 edge-list 和 tidyverse,以便进行组统计。
尝试找到一些现有的教程,例如 this one。
我不明白你有什么数据,这里是一个小型网络分析例程的例子:
- 您首先必须定义您要分析的 link 类型(例如,什么关系?边是否有向 - 并且可能是相互的 - 或不是?节点和边的哪些特征是相关的?) .
然后你必须建立你的边缘列表。就我而言,最常见的 小型网络(不需要大性能)的方法是制作一个 data.frame 与tidyverse。在网络分析的每种情况下,您都需要一个边列表。它通常是 data.frame 和您称为网络的 2 个实体之间的 link。 然后分析:
- FOR SMALL GRAPH ONLY,你从绘图开始,阅读情节。此后,边列表发送到 igraph 并绘制,假设您需要 tidyverse 语法(
%>%
):
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()
- FOR SMALL GRAPH ONLY,你从绘图开始,阅读情节。此后,边列表发送到 igraph 并绘制,假设您需要 tidyverse 语法(
在3个节点和4个links之间绘制一个小型定向网络(Igraph说:IGRAPH DN-- 3 4 --
表示DN定向网络,3个节点和4 links).
- 同时,您必须进行一些 tidyverse 组统计,例如
myedgeslist %>% group_by(to) %>% summarise(nlinksto= n(), n_nodes=n_distinct(from)) %>% arrange(desc(n_nodes))
说 'man1' 是最中心的节点,因为 2 link 去他那里(相对于 man3 和 man2 一个 link) .
同时,就像我上面说的,阅读一些网络分析和计算指标的理论知识来理解网络(中心性,互惠性......)。例如,
mygraph %>% igraph::edge_density()
表示66%的定向link都在这个网络中实现了。
PS: 绘制大型网络通常是个坏主意,你必须将它们分成几部分或通过 global/grouped 统计恢复网络.