7

パッケージを使用して、Rの3ノードモチーフをマイニングしようとしていますigraph。グラフ内の個々の頂点のモチーフの数を取得したいのですが、graph.motifs()関数からは取得できないようです。

したがって、グラフの例では、次のようになります。

testGraph = barabasi.game(10, 
m = 5,
power = 2, 
out.pref = TRUE,
zero.appeal = 0.5,
directed = TRUE)

graph.motifs()グラフ全体の各3ノードモチーフの総数を数えるために使用できます。

graph.motifs(testGraph, 
size = 3)

[1] 0 0 26 0 16 0 2 58 0 0 0 0 0 0 0 0

しかし、私は個々の頂点の参加を知りたいです。では、頂点1はいくつのモチーフ(およびどのタイプ)に参加しますか?誰かがそれを行う簡単な方法を知っていますか?

4

2 に答える 2

7

これが簡単な方法です。

頂点Aのトライアドに関心がある場合は、最初にAとそのすぐ隣を含む誘導サブグラフを作成します。neighborhood()これは、 およびinduced.subgraph()または で簡単に実行できますgraph.neighborhood()

次に、このサブグラフでモチーフを見つけますが、graph.motifs()ではなく を使用しtriad.census()ます。これは、接続されていないものも含め、可能なすべてのトリプルをカウントするためです。

次に、このサブグラフからAを削除し、triad.census()再度呼び出します。2 つのカウント ベクトルの差は、まさにAを含むモチーフになります。

于 2012-09-12T13:39:30.610 に答える
6

これは、ガボールのソリューションの自己完結型の例です。

testGraph = barabasi.game(10, 
    m = 5,
    power = 0.6, 
    out.pref = TRUE,
    zero.appeal = 0.5,
    directed = TRUE)

# Label nodes to more easily keep track during subsets/deletions
V(testGraph)$name = c('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten')

subGraph = graph.neighborhood(testGraph, order = 1, V(testGraph)[1], mode = 'all')[[1]]
allMotifs = triad.census(subGraph)
removeNode = delete.vertices(subGraph, 'one')
node1Motifs = allMotifs - triad.census(removeNode)
于 2012-09-21T21:04:14.463 に答える