【问题标题】:R igraph graph density, diameter, eccentricity and shortest pathR igraph 图密度、直径、偏心率和最短路径
【发布时间】:2015-12-01 15:03:21
【问题描述】:

希望有人能帮帮我。

我有一个 n=2071 节点和 m=9023 边的无向图 g。 我使用 igraph 包计算了 R 中的图形密度,得到以下结果:

> graph.density(g,loop=FALSE)
[1] 0.00210475

但是,使用图形密度的公式,即密度 = 平均度数 / (n-1),我得到以下结果:

> mean(degree(g))/(vcount(g)-1)
[1] 0.0042095

为什么 graph.density() 会给我一个不同的(错了吗?)答案?

另外一个问题,图的最大偏心率不就是=直径=最大最短路径吗?还是我混淆了概念? 使用 igraph 包在 R 中计算,得到以下结果:

> max(shortest.paths(g,mode="all"))
[1] 17
> diameter(g,directed=FALSE,unconnected=FALSE,weights=NULL)
[1] 17
> max(eccentricity(g,mode="all"))
[1] 8

我使用 Gephi 进行了仔细检查,我得到了直径 = 8。 为什么价值观之间存在差异?

另外,我发现了一个几乎类似的问题(igraph radius and diameter),但它并没有完全问/回答我想要什么。它说该错误已被修复。

【问题讨论】:

  • 对于无向图,您必须将密度公式乘以 2。(因为无向图中可能的边数为 N * (N-1) / 2)
  • 我很确定 igraph 会按照指示处理您的图表,因此密度较低 - 请注意,它恰好是您从其他公式获得的密度的一半。这可能也是路径长度更长的原因 - 如果您的图形是有向的,则只能沿一个方向跟随边,因此某些路径将不可避免地变得更长。使用is.directed(g) 检查 igraph 是否将您的图视为无向图。
  • 谢谢。显然 g 是在不知不觉中被引导的。一旦我纠正了它并确保 g 是无向的,计算的图形密度就如预期的那样。但是,max(shortest.paths(g))、diameter(g) 和 max(eccentricity(g)) 仍然给了我保存的答案。

标签: r igraph


【解决方案1】:

igraph 中的直径计算在执行计算时会考虑边缘权重,因此为了使 igraph 和 Gephi 中计算的直径相同,我们需要在 igraph 中将 weights 参数设置为“NA”。

diameter(graph_data, weights = NA)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2020-09-28
    相关资源
    最近更新 更多