基于给定的度分布在R中生成随机有向网络

时间:2016-09-22 03:06:28

标签: r igraph

我想基于给定的度数分布在R中生成随机图。我正在尝试使用degree.sequence.game包中的igraph函数,但它并不能完全符合我的要求。我有疑问:

(a)必须对该功能的进出程度施加什么条件?例如:

ex <- 
    degree.sequence.game(out.deg = c(4,2,17,26,19,17,17,24, 31,32,34,44,40), 
                         in.deg  = c(4,7,13, 13,23,25,26,22,21,38,38,36, 42),
                         method = c("simple"))

这可行,但我不想在我的图中循环,所以我试图设置`method = c(“simple.multiple”)但这会返回错误:

Error in .Call("R_igraph_degree_sequence_game", as.numeric(out.deg), in.deg,  : 
  At games.c:1072 : No simple directed graph can realize the given degree sequence, Invalid value

我不太确定如何解决这个问题......

(b)无论如何都要生成一个保留链接顺序的ORDERED图(我知道网络是一个聚合对象),我真正想做的是(将上一个图作为一个示例):

> ex
IGRAPH D--- 13 308 -- Degree sequence random graph
+ attr: name (g/c), method (g/c)
+ edges:
  [1]  3->13  8-> 7  5-> 6  4-> 4 13-> 2 10-> 3 12-> 6  7->12  4-> 6  4->12 11-> 5  7-> 8 10->13  8->10 11-> 5 12-> 6  7-> 6 13-> 9 10->13  3->13 13->13
 [22] 13->10  8-> 4 10->12  7->10  9->13  9-> 2 10-> 9  9->13  9-> 5  9->10 10-> 8 12-> 6 10-> 7 11->12  5->13  4-> 5  9->13 12->10  5-> 2  3->11 11->10
 [43] 12-> 6  6->12 12-> 6 13-> 8  6-> 4 11-> 5 13-> 6 13->13  5->13 13-> 8 10->11 12->11  8->11  8-> 5  7-> 8 12-> 3  1->12  5-> 7  8->11  9-> 4 10->10
 [64] 12->10 12->10 13->10  9->13  9-> 7 10-> 8 12-> 8  9-> 8 13->12 10-> 5  8-> 5  9-> 4  7->10  4-> 7  7->12  7-> 7  4->12 12->10 13->12 10-> 3 13->11
 [85]  6->10 10->10  9-> 4  5->13  2-> 7  4->13  4->11 10-> 5  8-> 4 12-> 3 11->10 13->10  9->13  9->11  9-> 3  3-> 9 12-> 7 10-> 4 13-> 8  5->10  8-> 9
[106] 11-> 4 10-> 3 11-> 4  9->11  4-> 3 12-> 9  6-> 5 10-> 9 11-> 9  8->12 12-> 3  6-> 1 10-> 9 12-> 8  4->13  8-> 9 10-> 8  5->11 13-> 3  5-> 7 11->12
[127] 13-> 7 10-> 7  9-> 6  4-> 7  8-> 8  8->11 11->11  7-> 3 12->11  8->12  6->11 11->11 12->11 13-> 9 13-> 7 12-> 6  6-> 9  9->12 12->13  3-> 2  8->12
[148]  8-> 9  9-> 8  9->12 10->10 12-> 9  5->10  3->13  8->10 11-> 8 13-> 5 13->12 11->10  8->10  3->11  6->11 10->11 12->13 12->11 12-> 8  3->13  7-> 7
+ ... omitted several edges

我想介绍一些结构,所以如果链接1-&gt; 3后面跟着3-> 4,我想知道某种方式

1 个答案:

答案 0 :(得分:1)

A)。你的出度(308)的总和是你的度数之和(307),所以没有自循环就不可能生成随机图。将其中一个度数减一,代码就可以工作。

B)。您是否要求源节点排序的边缘序列?如果是这样,这样的事情就可以了,

el=data.frame(get.edgelist(ex))
el[with(el,order(X1)),]