【问题标题】:How to create a bipartite network in R with igraph or tnet如何使用 igraph 或 tnet 在 R 中创建二分网络
【发布时间】:2013-02-28 08:28:01
【问题描述】:

我有一个双模网络的边缘列表,类似于:

person  Event
Amy     football_game
Sam     picnic
Bob     art_show

我想在 R 中对此进行分析,但似乎我尝试的一切都失败了。将其转换为单模式网络会遇到内存限制,我无法弄清楚如何在 igraph 或 tnet 中将其分析为二分。

在 igraph 中,bipartite.projection 给了我所有 FALSE,在使用

创建的 igraph 对象上
net <- graph.edgelist(myobject)

在 tnet 上,我无法将 igraph 网络转换为 tnet 网络,当我尝试使用原始数据帧时,由于图中重复而拒绝。

因此,我们将非常感谢您对以下任何问题的回答:

  1. 如何使用bipartite.mapping 函数?
  2. 如何将 igraph 对象输入到 tnet?
  3. 如果一切都失败了,我该如何将具有重复边的数据框输入到 tnet 中?

很抱歉,如果这些是基本问题,但文档很少。

编辑

例子:

edgelist <- read.table(text="Person    Event
                             Amy       football
                             Bob       picnic
                             Sam       artshow", 
                       header=TRUE)
edgelist <- as.matrix(edgelist)

## Igraph Issues
igraph <- graph.edgelist(edgelist)
typevector <- bipartite.projection(igraph) 
# gets all FALSE

edgelist2 <- get.edgelist(igraph)
typevector <- bipartite.projection(edgelist2) 
# same thing

## tnet issues
tnet <- as.tnet(edgelist) 
# gives error: "There are duplicate events in the edgelist"
tnet <- as.tnet(edgelist2)
clusterMat <- clustering_local_tm(tnet)  
# gives error: "max not meaningful for factors"

onemode <- projecting_tm(tnet, method="Newman") 
# gives error: "arguments must have same length"

【问题讨论】:

  • 总是尝试发布reproducible example。这将有很大帮助。我们不知道myobject 是什么。
  • 另外,如果有人只有教程或 tnet 示例,那么仅此一项就会有很大帮助。
  • @user1888451 Tore Opsahl(作者)在他的网站上研究了一些例子。 toreopsahl.com/tnet

标签: r igraph sna


【解决方案1】:

在 igraph 中,二分网络是具有type 顶点属性的网络。此属性必须是逻辑的,并且对于其中一种节点类型必须是 TRUE,对于其他节点类型必须是 FALSE。因此,要从边缘列表创建二分网络,您只需创建一个常规图,然后添加 type 顶点属性:

edgelist <- read.table(text="Person    Event
                         Amy       football
                         Bob       picnic
                         Sam       artshow", 
                   header=TRUE)
igraph <- graph.data.frame(edgelist)

V(igraph)$type <- V(igraph)$name %in% edgelist[,1]
igraph
# IGRAPH DN-B 6 3 -- 
# + attr: name (v/c), type (v/x)

“B”字母告诉您这是一个二分图。您可以通过以下方式创建此网络的单部分投影:

bipartite.projection(igraph)
# $proj1
# IGRAPH UN-B 3 0 -- 
# + attr: name (v/c), type (v/x)
#
# $proj2
# IGRAPH UN-B 3 0 -- 
# + attr: name (v/c), type (v/x)

这将返回两个图表的列表。如果您认为投影可能太大,您可以先调用bipartite.projection.size 函数,这将为您提供两个投影中的顶点和边的数量。 igraph 图的内存需求为 (4m+2n)*8+O(1) 字节,其中“n”是顶点数,“m”是边数。

【讨论】:

  • @Gabor 我试图投影一个加权二分图,我得到错误负向量不允许,这会导致我的 R 会话崩溃......你以前有过这个吗?
  • @user1317221_G:您的图很可能不是二分图,即您在相同类型的顶点之间有连接。
  • @Gabor 你能告诉我如何可视化该图表。有两种不同颜色的节点
  • 根据顶点类型设置顶点颜色,例如V(g)$color &lt;- V(g)$type + 1.
  • "igraph 图的内存需求是 (4m+2n)*8+O(1) byte" 在这个等式中 O(1) 是什么意思?
猜你喜欢
  • 1970-01-01
  • 2013-11-26
  • 2018-08-31
  • 1970-01-01
  • 2014-02-06
  • 2022-12-17
  • 2018-06-16
  • 2015-09-09
  • 2019-04-29
相关资源
最近更新 更多