【问题标题】:calculate the modularity on each step计算每一步的模块化
【发布时间】:2012-12-29 06:24:53
【问题描述】:
library(igraph)
g=graph.famous("Zachary")
c=edge.betweenness.community(g)
a=membership(c)
c$merges
b=community.to.membership(g,c$merges,steps=33)

[1] 1 1 2 1 3 3 3 1 4 5 3 1 1 1 4 4 3 1 4 1 4 1 4 4 2 2 4 2 2 4 4 2 4 4

[1] 9 4 0 0 0 0 5 0 3 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 7 0 0 8

我希望 b 与 members(c) 相同,因为有 33 个步骤。但是为什么 b 与membership(c) 不同呢?

【问题讨论】:

    标签: r social-networking igraph complex-networks


    【解决方案1】:

    这似乎是 igraph 中的一个错误,因为即使以下内容也不起作用:

    > library(igraph)
    > g <- graph.full(3)
    > c <- edge.betweenness.community(g)
    > community.to.membership(g, c$merges, steps=1)$membership
    

    这给了我1 2 0的会员向量,这显然是错误的;正确的结果应该是1 0 00 1 1。实际上,您可以通过从合并矩阵中减去 1 来修复该错误:

    > g <- graph.famous("zachary")
    > c <- edge.betweenness.community(g)
    > membership(c)
    [1] 1 1 2 1 3 3 3 1 4 5 3 1 1 1 4 4 3 1 4 1 4 1 4 4 2 2 4 2 2 4 4 2 4 4
    > community.to.membership(g, c$merges-1, steps=29)$membership
    [1] 0 0 2 0 3 3 3 0 1 4 3 0 0 0 1 1 3 0 1 0 1 0 1 1 2 2 1 2 2 1 1 2 1 1
    

    这两个成员向量本质上是相同的(有一点重新索引)。请注意,您只需要 29 步即可达到相同的隶属度向量,因为图中有 34 个顶点,并且您有 5 个社区,因此您需要执行 34-5=29 次合并。执行 33 个步骤只会让您获得一个社区。​​p>

    我将在 igraph 的错误跟踪器中为此提交错误报告。

    【讨论】:

    • 太棒了!你是如何通过从合并矩阵中减去 1 来找到这个解决方案的?我觉得解决这个问题的过程很重要。谢谢。
    • 好吧,我在作弊 ;) 我是 igraph 的开发人员之一,我知道 R 接口最近已从基于零的索引切换(这在 igraph 的 C 核心中非常自然)到从 1 开始的索引(这是大多数 R 用户所期望的),所以我只是怀疑 community.to.membership 从网络中溜走,仍然期望从零开始的合并矩阵。
    猜你喜欢
    • 2015-01-27
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2020-12-22
    • 2017-02-10
    • 1970-01-01
    相关资源
    最近更新 更多