首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >I图中不一致的局部传递性输出

I图中不一致的局部传递性输出
EN

Stack Overflow用户
提问于 2022-01-25 19:31:08
回答 2查看 119关注 0票数 2

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

代码语言:javascript
复制
set.seed(123)    
a <- rbinom(144, 1, .5)
b <- graph.adjacency(matrix(a, nrow = 12, ncol = 12), mode = "undirected")

transitivity(b, type = "local")

这提供了以下输出:

代码语言:javascript
复制
 [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

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

代码语言:javascript
复制
transitivity(b, vids = 2, type = "local")

[1] 0.75

事实上,当我试图计算所有顶点的局部传递性时,许多与我不考虑vid参数的情况是不同的。在某些情况下,当我尝试过,所有的都是不同的。

代码语言:javascript
复制
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参数。

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

对于造成这种情况的原因或者我应该使用哪一组结果,有什么想法吗?

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-25 21:52:35

您应该注意到,您的图b不是简单的图,因为它包含自循环。

在这样的图形上运行transitivity时,您将看到一个警告/错误消息。

传递性仅适用于简单图。结果可能是不正确的。IGraph1.3.0及更高版本将将此视为错误。

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

代码语言:javascript
复制
b <- simplify(graph.adjacency(matrix(a, nrow = 12, ncol = 12), mode = "undirected"))

然后你会看到

代码语言:javascript
复制
> 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
票数 2
EN

Stack Overflow用户

发布于 2022-01-26 07:49:04

正如托马斯所说,transitivity(b, type = "local")的结果是不正确的,因为b不是简单的,对于R/iGraph1.2.x中的非简单图,不支持局部传递性计算。如果使用最新版本,将有一个明确的警告:

代码语言:javascript
复制
> 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更可靠。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70854593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档