在網絡上進行社群檢測時,有時我們不僅擁有實體之間的聯系。這些實體代表了我們可能也想在網絡可視化中代表的現實事物。
1.
2. plot(g)
3.
我使用資料集,代表了觀察到的 18 位女性參加 14 場社交活動的情況。
不考慮這個圖是二向圖,讓我們嘗試将圖劃分為社群。有自然的分界線嗎?讓我們根據節點所屬的社群為節點着色:
1. community(g)
2. col <- membership + 1
3. plot
正如我們所看到的,該算法找到了2個社群,乍一看,這種劃分似乎是合理的。無論如何,還有一種自然的劃分是算法無法找到的:事件/女性的二進制關系。每個節點都有這樣的屬性:"是女性 "或 "是事件"。讓我們用不同的方式來描述這個圖的特征。我們有14個事件。對于這些,我們改變它們的形狀。
1. shape <- "squa"
2. shape <- "cice"
3. plot(g)
如何從給定的網絡中提取社群?
在網絡中尋找社群是複雜系統範式下的一項常見任務。有幾種方法可以使用非常不同的包對圖進行社群分區。
網絡社群檢測算法
walktrap.community
該算法通過執行随機遊走找到密集連接配接的子圖。這個想法是随機遊走将傾向于留在社群内,而不是跳到其他社群。
邊緣.中間.社群
這個算法就是Girvan-Newman算法。它是一種分割算法,在每一步中,具有最高間性的邊被從圖中移除。對于每一次劃分,你都可以計算出圖的子產品化程度。最後,在這個過程給你帶來最高子產品化值的地方選擇切割樹狀圖。
Newman快速算法(fast greedy)
該算法是紐曼算法。在這種情況下,算法是凝聚的。在每一步,兩組合并。合并是通過優化子產品化決定的。這是一種快速算法,但有一個貪婪算法的缺點。是以,雖然我發現它有用且準确,但它可能不會産生最佳的整體社群劃分。
自旋玻璃社群發現
該算法使用自旋玻璃模型和模拟退火來查找網絡内的社群。
1.
2. # 首先我們加載ipgrah軟體包
3.
4.
5. # 讓我們生成兩個網絡并将其合并為一個圖。
6. graph.union
7.
8. # 讓我們删除多線和循環
9. simplify
10.
11. # 讓我們用Grivan-Newman算法看看這裡是否有社群。
12. # Grivan-Newman算法
13. # 首先,我們計算邊緣間性、合并等。
14. edge.betweenness.community
15.
16. # 現在我們有了合并/拆分,我們需要計算子產品化。
17. # 對于每個合并,我們将使用一個函數,對于每個邊被删除,将建立第二個圖,檢查其成員資格并使用該成員資格來計算子產品化程度
18. membership
19. # -在原圖g上計算子產品化
20. modularit
21.
22. # 我們現在可以繪制所有子產品化的圖
23. plot
24.
25. # 現在,讓我們根據節點的成員資格為其着色
26. removed.edges
27. color=membership
28.
29. # 讓我們為圖選擇一個布局
30. layout
31.
32. # 繪制
33. plot
34.
35. # 使用 fastgreedy.community算法
36.
37. plot
38.