首页 > 解决方案 > “sna”或“igraph”:为什么我会为无向图获得不同的度数?

问题描述

我正在使用 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”,我都会得到相同的结果。

这种现象有什么解释吗?如果是这样,我能做些什么来防止这种情况发生吗?

先感谢您!

标签: rigraphsnadegreesundirected-graph

解决方案


这在 sna::degree 的文档中进行了解释。

顶点的入度 v 对应于顶点集 N^+(v) = {i in V(G) : (i,v) in E(G)} 的基数;outdegree 对应于顶点集 N^-(v) = {i in V(G) : (v,i) in E(G)} 的基数;并且总(或“弗里曼”)学位对应于|N^+(v)| + |N^-(v)|。

(请注意,对于简单的图表,

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

一个比你更简单的例子说明了这一点。

library(igraph)
library(sna)

g = make_ring(3)
plot(g)

具有三个节点的简单环形图

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

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

顶点 1 具有到顶点 2 和 3 的链接。这些都计入度数并计入出度数,因此
Freeman = in + out = 2 + 2 = 4
文档中的“注释”说明了这一点。


推荐阅读