我需要确定网络中每个节点的传递性,但结果不一致。
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事实上,当我试图计算所有顶点的局部传递性时,许多与我不考虑vid参数的情况是不同的。在某些情况下,当我尝试过,所有的都是不同的。
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参数。
结果略有不同,但如果我创建一个定向网络,结果仍然不匹配。
对于造成这种情况的原因或者我应该使用哪一组结果,有什么想法吗?
谢谢你的帮助。
发布于 2022-01-25 21:52:35
您应该注意到,您的图b不是简单的图,因为它包含自循环。

在这样的图形上运行transitivity时,您将看到一个警告/错误消息。
传递性仅适用于简单图。结果可能是不正确的。IGraph1.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-26 07:49:04
正如托马斯所说,transitivity(b, type = "local")的结果是不正确的,因为b不是简单的,对于R/iGraph1.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如果您没有看到此警告,请将其提升到iGraph1.2.11。
为什么transitivity(b, type='local")和transitivity(b, vids=V(b), type='local")给出了不同的结果?这是因为在计算所有顶点与特定顶点子集的结果时,内部使用不同的代码路径,以提高性能。
警告消息说,“iGraph1.3.0及更高版本将将此视为错误。”但实际上,从那时起,版本1.3和已经增加了对多图的支持。都有了大量的改进(更准确地说,这已经添加到C/iGraph0.9中,而R/iGraph1.3将以后者为基础)。
我鼓励您尝试R/igraph的开发版本,它将成为1.3.0版本。安装说明是这里;请注意,您需要安装R开发工具(在Windows/Mac上),因为包是从源代码编译的。与1.2.x系列相比,这个版本有大量的修复,在这一点上,应该被认为比“稳定的”1.2.11更可靠。
https://stackoverflow.com/questions/70854593
复制相似问题