【问题标题】:"sna" or "igraph" : Why do I get different degree values for undirected graph?“sna”或“igraph”:为什么我会为无向图获得不同的度数?
【发布时间】:2020-02-14 19:32:09
【问题描述】:

我正在使用 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

标签: r igraph sna degrees undirected-graph


【解决方案1】:

这在 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)};和总计 (或“Freeman”)度数对应于 |N^+(v)| + |N^-(v)|。

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

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
文档中的“注释”说明了这一点。

【讨论】:

    猜你喜欢
    • 2020-12-21
    • 2021-03-23
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2019-12-25
    • 1970-01-01
    相关资源
    最近更新 更多