"sna" 或 "igraph" :为什么我得到的无向图的度数不同?
"sna" or "igraph" : Why do I get different degree values for undirected graph?
我正在使用 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".
,我都会得到相同的结果
这种现象有什么解释吗?如果是这样,我能做些什么来防止这种情况发生吗?
提前致谢!
sna::degree 的文档中对此进行了解释。
indegree of a vertex, v, corresponds to the cardinality
of the vertex set N^+(v) = {i in V(G) : (i,v) in E(G)};
outdegree corresponds to the cardinality of the vertex
set N^-(v) = {i in V(G) : (v,i) in E(G)}; and total
(or “Freeman”) degree corresponds to |N^+(v)| + |N^-(v)|.
(Note that, for simple graphs,
indegree=outdegree=total degree/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。这些在
入度也算入出度,所以
弗里曼 = 进 + 出 = 2 + 2 = 4
文档中的 "Note" 说明了这一点。
我正在使用 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".
,我都会得到相同的结果这种现象有什么解释吗?如果是这样,我能做些什么来防止这种情况发生吗?
提前致谢!
sna::degree 的文档中对此进行了解释。
indegree of a vertex, v, corresponds to the cardinality of the vertex set N^+(v) = {i in V(G) : (i,v) in E(G)}; outdegree corresponds to the cardinality of the vertex set N^-(v) = {i in V(G) : (v,i) in E(G)}; and total (or “Freeman”) degree corresponds to |N^+(v)| + |N^-(v)|.
(Note that, for simple graphs,
indegree=outdegree=total degree/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。这些在
入度也算入出度,所以
弗里曼 = 进 + 出 = 2 + 2 = 4
文档中的 "Note" 说明了这一点。