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(),因为这会计算所有可能的三元组,甚至是非连接的三元组。

然后从这个子图中删除Atriad.census() ,然后再次调用。两个计数向量的差异将恰好是包含A的基序。

于 2012-09-12T13:39:30.610 回答
6

这是 Gabor 解决方案的一个独立示例:

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 回答