"sna"或"igraph": 为什么我对于无向图得到不同的度值?

3

我正在使用R包“networkdata”中的网络进行基本网络分析。为此,我使用了“igraph”和“sna”两个软件包。然而,我发现,根据我所使用的软件包不同,描述性网络统计结果也会有所不同。虽然大多数变化不太严重,但我的无向图平均度数在从“sna”切换到“igraph”后减半了。

library(networkdata)
n_1 <- covert_28

library(igraph)
library(sna)

n_1_adjmat <- as_adjacency_matrix(n_1)
n_1_adjmat2 <- as.matrix(n_1_adjmat)

mean(sna::degree(n_1_adjmat2, cmode = "freeman")) # [1] 23.33333
mean(igraph::degree(n_1, mode = "all")) # [1] 11.66667


这在我的有向图中是不会发生的。在这里,无论使用"sna"还是"igraph",我都会得到相同的结果。
这种现象有什么解释吗?如果有,有什么方法可以防止它发生?
提前感谢您!

gmode="graph" 添加到 sna 函数中。有关参数,请参见 ?sna::degree - user20650
1个回答

2

这在sna::degree的文档中有解释。

一个顶点v的入度对应于顶点集合N^+(v)的基数, 其中N^+(v)={i in V(G) : (i,v) in E(G)}; 出度对应于顶点集合N^-(v)的基数, 其中N^-(v)={i in V(G) : (v,i) in E(G)}; 总度数(或“Freeman”度数)对应于|N^+(v)| + |N^-(v)|。

(请注意,对于简单图,

入度=出度=总度数/2.)

一个比你的例子更简单的例子可以让它更清晰易懂。

library(igraph)
library(sna)

g = make_ring(3)
plot(g)

Simple ring graph with three nodes

AM = as.matrix(as_adjacency_matrix(g))
sna::degree(AM)
[1] 4 4 4

igraph::degree(g)
[1] 2 2 2

第一个顶点同时链接了第二个和第三个顶点。这些链接在入度计数和出度计数中都要算上,因此:
Freeman = in + out = 2 + 2 = 4
文档中的“注释”说明了这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接