igraph、statnet 和 GEPHI 有问题吗?
Problems with igraph, statnet and GEPHI?
我正在 Gephi、Python 和 R 中使用一些图形模型。直到偶然的机会,我决定比较他们给我的结果。
所以我遇到了以下问题。用Gephi和R计算介数中心性时(用igraph和statnet),三者给了我不同的结果(igraph和statnet,区别不大)。由于我在一个非常大的网络上工作,我决定采用一个小网络并手动执行计算,如下图所示(摘自:enter link description here)
enter image description here
使用邻接表:
source target
1 2
1 3
1 4
2 3
3 4
4 5
4 6
5 6
5 8
5 7
6 8
6 7
7 8
7 9
然后看看我扔了R和Gephi有什么结果。我发现 Gephi 给了我相同的结果:
enter image description here
但是 R(igraph 和 statnet 都不是)。
> library('igraph')
> data <- read.csv(file.choose())
> set.seed(123456)
> graph_1<-graph.data.frame(data)
> summary(graph_1)
IGRAPH cfa51db DN-- 9 14 --
+ attr: name (v/c)
> graph_1
IGRAPH cfa51db DN-- 9 14 --
+ attr: name (v/c)
+ edges from cfa51db (vertex names):
[1] 1->2 1->3 1->4 2->3 3->4 4->5 4->6 5->6 5->8 5->7 6->8 6->7 7->8 7->9
> betweenness(graph_1)
1 2 3 4 5 6 7 8 9
0 0 6 15 6 6 6 0 0
> detach("package:igraph", unload=TRUE)
> library(statnet)
> library(intergraph)
> graph_2<-asNetwork(graph_1)
> betweenness(graph_2)
[1] 0 0 6 15 6 6 6 0 0
我的 运行 我的 R 代码是不是做错了什么,还是使用另一种算法来计算介数中心性?
谢谢:)
您正在计算两个不同的东西。
首先,为了使您的示例可重现,这里是我们所有人都可以用来制作您的示例的代码。
library(igraph)
EL = matrix(c(1,2, 1,3, 1,4, 2,3, 3,4, 4,5, 4,6, 5,6, 5,8,
5,7, 6,8, 6,7, 7,8, 7,9), ncol=2, byrow=T)
graph_1 = graph_from_edgelist(EL)
现在,使用您的代码,我得到了相同的结果。
betweenness(graph_1)
[1] 0 0 6 15 6 6 6 0 0
然而,
betweenness(graph_1, directed=F)
[1] 3 0 3 15 6 6 7 0 0
给出的结果与您从 Gephi 获得的结果相同。
帮助页面 ?betweenness
说:
directed
Logical, whether directed paths should be considered while
determining the shortest paths.
很明显,Gephi 的默认值与 R 不同。
我正在 Gephi、Python 和 R 中使用一些图形模型。直到偶然的机会,我决定比较他们给我的结果。 所以我遇到了以下问题。用Gephi和R计算介数中心性时(用igraph和statnet),三者给了我不同的结果(igraph和statnet,区别不大)。由于我在一个非常大的网络上工作,我决定采用一个小网络并手动执行计算,如下图所示(摘自:enter link description here)
enter image description here
使用邻接表:
source target
1 2
1 3
1 4
2 3
3 4
4 5
4 6
5 6
5 8
5 7
6 8
6 7
7 8
7 9
然后看看我扔了R和Gephi有什么结果。我发现 Gephi 给了我相同的结果:
enter image description here
但是 R(igraph 和 statnet 都不是)。
> library('igraph')
> data <- read.csv(file.choose())
> set.seed(123456)
> graph_1<-graph.data.frame(data)
> summary(graph_1)
IGRAPH cfa51db DN-- 9 14 --
+ attr: name (v/c)
> graph_1
IGRAPH cfa51db DN-- 9 14 --
+ attr: name (v/c)
+ edges from cfa51db (vertex names):
[1] 1->2 1->3 1->4 2->3 3->4 4->5 4->6 5->6 5->8 5->7 6->8 6->7 7->8 7->9
> betweenness(graph_1)
1 2 3 4 5 6 7 8 9
0 0 6 15 6 6 6 0 0
> detach("package:igraph", unload=TRUE)
> library(statnet)
> library(intergraph)
> graph_2<-asNetwork(graph_1)
> betweenness(graph_2)
[1] 0 0 6 15 6 6 6 0 0
我的 运行 我的 R 代码是不是做错了什么,还是使用另一种算法来计算介数中心性? 谢谢:)
您正在计算两个不同的东西。
首先,为了使您的示例可重现,这里是我们所有人都可以用来制作您的示例的代码。
library(igraph)
EL = matrix(c(1,2, 1,3, 1,4, 2,3, 3,4, 4,5, 4,6, 5,6, 5,8,
5,7, 6,8, 6,7, 7,8, 7,9), ncol=2, byrow=T)
graph_1 = graph_from_edgelist(EL)
现在,使用您的代码,我得到了相同的结果。
betweenness(graph_1)
[1] 0 0 6 15 6 6 6 0 0
然而,
betweenness(graph_1, directed=F)
[1] 3 0 3 15 6 6 7 0 0
给出的结果与您从 Gephi 获得的结果相同。
帮助页面 ?betweenness
说:
directed
Logical, whether directed paths should be considered while determining the shortest paths.
很明显,Gephi 的默认值与 R 不同。