2

我需要确定网络中每个节点的传递性,但得到的结果不一致。

set.seed(123)    
a <- rbinom(144, 1, .5)
b <- graph.adjacency(matrix(a, nrow = 12, ncol = 12), mode = "undirected")

transitivity(b, type = "local")

这提供了输出:

 [1] 0.6888889 0.4909091 0.4444444 0.9333333 0.4909091 0.7500000 0.7333333 0.4666667 0.7333333 0.4222222 0.5000000
[12] 0.6944444

但是当我尝试指定单个节点时,输出中的某些值不匹配:

transitivity(b, vids = 2, type = "local")

[1] 0.75

事实上,当我尝试计算所有顶点的局部传递性时,许多与我将 vids 参数排除在外的情况不同。在某些情况下,当我尝试过这个时,一切都不同了。

transitivity(b, vids = V(b), type = "local")

  [1] 0.6888889 0.7500000 0.7142857 0.9333333 0.7500000 0.7500000 0.7333333 0.7500000 0.7333333 0.6785714 0.8571429
[12] 0.6944444

如果我将 vids 设置为 NULL 它匹配第一个输出,根本不包含 vids 参数。

结果略有不同,但如果我创建有向网络,仍然不匹配。

关于可能导致此问题的原因或我应该使用哪组结果的任何想法?

感谢您的帮助。

4

2 回答 2

2

你应该知道你的图b不是一个简单的图,因为它包含自循环

在此处输入图像描述

transitivity在此类图表上运行时,您将看到警告/错误消息

传递性仅适用于简单图。结果可能不正确。igraph 1.3.0 及更高版本会将其视为错误。

因此,如果您想以transitivity正确的方式使用,您应该首先排除自循环,例如,

b <- simplify(graph.adjacency(matrix(a, nrow = 12, ncol = 12), mode = "undirected"))

然后你会看到

> transitivity(b, type = "local")
 [1] 0.6888889 0.7500000 0.7142857 0.9333333 0.7500000 0.7500000 0.7333333
 [8] 0.7500000 0.7333333 0.6785714 0.8571429 0.6944444

> transitivity(b, vids = V(b), type = "local")
 [1] 0.6888889 0.7500000 0.7142857 0.9333333 0.7500000 0.7500000 0.7333333
 [8] 0.7500000 0.7333333 0.6785714 0.8571429 0.6944444
于 2022-01-25T21:52:35.543 回答
2

正如托马斯所说,你得到的结果transitivity(b, type = "local")是不正确的,因为b它并不简单,并且 R/igraph 1.2.x 中的非简单图不支持局部传递性计算。如果你使用最新版本,会有明确的警告:

> transitivity(b, type = "local")
Transitivity works on simple graphs only. The result might be incorrect. igraph 1.3.0 and later will treat this as an error.
 [1] 0.6888889 0.4909091 0.4444444 0.9333333 0.4909091 0.7500000 0.7333333 0.4666667
 [9] 0.7333333 0.4222222 0.5000000 0.6944444

如果您没有看到此警告,请升级到 igraph 1.2.11。

为什么会transitivity(b, type='local")给出transitivity(b, vids=V(b), type='local")不同的结果?这是因为在计算所有顶点与特定顶点子集的结果时,内部使用了不同的代码路径,以试图提高性能。

警告消息说“igraph 1.3.0 及更高版本会将其视为错误”。但事实上,从那时起,1.3 版已经进行了大量改进,并且已经添加了对多图的支持(更准确地说,这已添加到 C/igraph 0.9 中,R/igraph 1.3 将基于该版本)。

我鼓励您尝试 R/igraph 的开发版本,它将成为 1.3.0 版本。安装说明在这里;请注意,您需要安装 R 开发工具(在 Windows/Mac 上),因为该包是从源代码编译的。这个版本相比 1.2.x 系列有大量的修复,在这一点上,应该被认为比“稳定”的 1.2.11 更可靠。

于 2022-01-26T07:49:04.640 回答