如何用iGraph挖掘R中的图案

时间:2012-09-11 17:00:35

标签: r graph igraph

我正在尝试使用包igraph挖掘R中的3节点图案。我想检索图中每个顶点的图案数量,这从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参与了多少个图案(以及什么类型)?有人知道一个简单的方法吗?

2 个答案:

答案 0 :(得分:7)

这是一个快速的操作方法。

你对顶点 A 的三元组感兴趣,然后首先创建包含 A 及其直接邻居的诱导子图。您可以通过neighborhood()induced.subgraph()或仅使用graph.neighborhood()执行此操作。

然后在这个子图中找到主题,但不是graph.motifs(),而是triad.census(),因为它会计算所有可能的三元组,甚至是非连接的三元组。

然后从此子图中删除 A ,然后再次调用triad.census()。两个计数向量的差异将是包含 A 的主题。

答案 1 :(得分: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)