在r中设置barabasi无标度模型的out.seq参数

时间:2016-05-13 00:58:27

标签: r igraph

我有一张无向图。我想为此图创建barabasi的无标度网络模型。我想传递out.dist参数来设置网络中的边数。但是,如果我将在out.seq中传递度数向量,那么无向网络中度数的总和将是边数的两倍。那么当我的网络没有定向时如何设置这个参数。我的脚本是

library(igraph)
gtest <- graph.formula(A:B - A:B, X:Z - X:Y - X:B, C:Z , C:X ,A:C - A:C)
plot(gtest)
g_scale_ex <- ba.game(6 , out.dist = degree(gtest) , directed = F)

g_scale_ex将有14个边数,因为它应该是7.

1 个答案:

答案 0 :(得分:1)

看起来你想要两件事之一。如果你想要精确的度数序列,那么你(使用新的igraph函数名称)就更好了:

g <- sample_degseq(degree(gtest))
gsize(g) # Number of edges
# 7
gorder(g) # Number of nodes
# 6

如果您想要一个Barabasi优先附加网络,那么指定精确的边缘数量会更难一点。我回答了similar question here,其中有一个小功能来生成正确的out.seq参数。

genOutSeq <- function(n, m) {
  n <- n-1 # Shift it along
  rem <- m %% n
  c(0, rep(m%/%n + 1, rem), rep(m%/%n, n - rem))
}

set.seed(11)
g <- sample_pa(gorder(gtest), power = 1,
               out.seq = genOutSeq(gorder(gtest), gsize(gtest)),
               algorithm = "psumtree-multiple", directed = FALSE)

这将创建正确数量的边,但有些是多边。默认算法不会创建多边,但可能无法创建正确的数字。

set.seed(11)
g <- sample_pa(gorder(gtest), power = 1,
               out.seq = genOutSeq(gorder(gtest), gsize(gtest)),
               directed = FALSE)
gsize(g)
# 6

据我所知,在你点击你的引号之前,没有办法继续添加边缘。在我链接的答案中,我只添加了一些随机边缘,因为只要图表不太密集,它通常就不会那么多。