【问题标题】:Correct way of calculating modularity for weighted graphs计算加权图模块化的正确方法
【发布时间】:2021-09-04 15:39:15
【问题描述】:

我有大约 13000 个基因,我正在尝试使用 igraph 进行聚类,如下所示:

g.communities <- edge.betweenness.community(as.undirected(g), weights = E(g)$weight)

返回 97 个社区,模块化程度为 0.9773353:

 modularity(as.undirected(g), membership = g.communities$membership, weights = E(g)$weight)
 
 #0.9773353

当我尝试自定义以下社区数量时,我得到的模块化为 0.0094:

 modularity(as.undirected(g), membership = cutat(g.communities, steps = 97), weights = 
 E(g)$weight)
 
 #0.0094

这些函数不应该返回相似的结果吗?另外,是否可以使用上述 函数找到正确的簇数? (因为只要增加步骤,模块化总是会增加)

最后 g.communities$modularity 为每个顶点返回一个数字。 这些数字是否可以解释为每个顶点与其对应模块的相关性?

【问题讨论】:

  • 此时不要将edge.betweenness.community用于加权图。看看我在这里写了什么:igraph.discourse.group/t/output-igcommunitiesedgebetweenness/… Unweighted 很好。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: r igraph


【解决方案1】:

您正在使用cut_atsteps 参数。这并没有指定社区的数量,而是指定要在树状图上执行的合并步骤的数量。如果您想要 97 个社区,请使用 cut_at(g.communities, no=97) 或直接使用 cut_at(g.communities, 97)


也就是说,我目前不建议在加权图上使用edge.betweenness.community,原因我描述了here

【讨论】:

  • 你是对的!! no=97 解决了这个问题!那么除了 edge.betweenness.community 没有其他用于加权图的替代函数吗?另外,关于 g.communities$modularity 及其代表的任何想法?
  • @pridu 一些社区检测功能支持加权图。为什么要使用edge.betweenness.community?无论如何,这不是一个很好的方法。
  • g.communities$modularity 表示每个可能的树状图切割处的模块化分数。
  • 我想使用 g.communities$modularity 返回作为集群内节点相关性的指标。我从 Louvain 开始,但在这种情况下 g.communities$modularity 只返回 4 个数字。似乎为每个顶点返回一个度量的唯一方法是 edge.betweenness.community。我还需要使用分层算法来使用 cut_at。对于这样一个有点大的加权网络,你会提出什么算法?
  • 不,g.communities$modularity 确实 not 包含每个顶点的值。这个向量的含义就是我在上面的评论中所说的。抱歉,我无法就如何衡量“集群内节点的相关性如何”给您提供评论大小的建议(事实上,您甚至不清楚您的意思是什么)。
猜你喜欢
  • 2014-10-06
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多