2012-09-11 8 views
7

Tôi đang cố gắng khai thác các họa tiết 3 nút trong R bằng cách sử dụng gói igraph. Tôi muốn lấy số lượng các họa tiết cho mỗi đỉnh riêng lẻ trong biểu đồ, không xuất hiện từ hàm graph.motifs().Làm thế nào để khai thác các họa tiết trong R với iGraph

Vì vậy, cho ví dụ đồ thị:

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

tôi có thể sử dụng graph.motifs() để đếm tổng số mỗi motif 3 nút trong toàn bộ đồ thị:

graph.motifs(testGraph, 
size = 3) 

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

Nhưng tôi muốn biết indiv tham gia đỉnh idual. Vậy, có bao nhiêu họa tiết (và loại nào) làm đỉnh 1 tham gia? Có ai biết một cách đơn giản để làm điều đó?

Trả lời

6

Đây là cách thực hiện nhanh.

Nó bạn quan tâm trong hội Tam hoàng của đỉnh Một, thì trước tiên tạo ra các đồ thị con gây ra có chứa Một và các nước láng giềng. Bạn có thể thực hiện điều này qua số neighborhood()induced.subgraph() hoặc chỉ đơn giản là với graph.neighborhood().

Sau đó tìm các họa tiết trong biểu đồ con này, nhưng không phải với graph.motifs(), mà là với triad.census(), bởi vì điều đó đếm tất cả các bộ ba có thể, thậm chí là bộ ba không được kết nối.

Sau đó, xóa A từ biểu đồ con này và gọi lại triad.census() lần nữa. Sự khác biệt của vectơ hai số sẽ chính xác là các họa tiết bao gồm A.

+0

Tôi sẽ để lại các mã thực tế như một bài tập. :) Nhưng hãy bình luận ở đây nếu bạn gặp bất kỳ vấn đề gì. –

+0

Cảm ơn Gabor, giải pháp đó đã làm việc cho tôi! –

6

Dưới đây là một ví dụ khép kín của giải pháp 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)