9

次のような 2 モード ネットワークのエッジリストがあります。

person  Event
Amy     football_game
Sam     picnic
Bob     art_show

これをRで分析したいのですが、試したことはすべて失敗しているようです。それを 1 モード ネットワークに変換するとメモリ制限が発生し、igraph または tnet で 2 部構成として分析する方法がわかりません。

igraph では、次を使用して作成された igraph オブジェクトについて、bipartite.projectionすべてを提供しますFALSE

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"
4

1 に答える 1

20

igraph では、2 部ネットワークはtype頂点属性を持つネットワークです。この属性は論理的である必要がありTRUE、ノード タイプの 1 つとFALSEその他のタイプに対して必要です。したがって、エッジ リストから 2 部ネットワークを作成するには、単純に通常のグラフを作成し、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」の文字は、これが 2 部グラフであることを示しています。このネットワークのユニパート プロジェクションは、次の方法で作成できます。

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)

これにより、2 つのグラフのリストが返されます。投影が大きすぎると思われる場合は、まずbipartite.projection.size関数を呼び出すことができます。これにより、両方の投影の頂点とエッジの数が得られます。igraph グラフのメモリ要件は (4m+2n)*8+O(1) バイトです。ここで、「n」は頂点の数、「m」はエッジの数です。

于 2013-03-13T18:08:34.430 に答える