I\'m trying to mine for 3-node motifs in R using the package igraph
. I would like to retrieve the number of motifs for each individual vertex in the graph, which d
Here's a self-contained example of Gabor's solution:
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)
Here is a quick how-to.
It you are interested in the triads of vertex A, then first create the induced subgraph that contains A and its immediate neighbors. You can do this via neighborhood()
and induced.subgraph()
or simply with graph.neighborhood()
.
Then find the motifs in this subgraph, but not with graph.motifs()
, but rather with triad.census()
, because that counts all possible triples, even a non-connected ones.
Then remove A from this subgraph, and call triad.census()
again. The difference of the two count vector will be exactly the motifs that include A.