2016-09-22 10 views
0

与えられた度数分布に基づいてRでランダムグラフを生成したい。 igraphパッケージのdegree.sequence.game機能を使用しようとしていますが、私がしたいことはそれほどありません。与えられた次数分布に基づいて確率的有向ネットワークをRで生成する

(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")) 

この作品が、私は私のグラフのループをしたくないので、私は `メソッド= 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 

リンク> 31->は4 3-が続いた場合ように、私は何とか

答えて

1

a)のことを知っていただきたいと思います。あなたのアウト・ディグリー(308)の合計はあなたの度合の合計(307)よりも1つ多いので、セルフ・ループなしでランダム・グラフを生成することは不可能です。度数の1つを減らすと、コードが機能します。

b)。あなたはソースノードによって順序付けられたエッジシーケンスを求めていますか?もしそうなら、このような何かがうまくいく、

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

あなたは同じ番号にするときとアウト度総和と言っている、 'メソッド=「simple.no.multiple」のオプションが'動作しますか?私は実際にはその変更で同じエラーが発生します...そして、実際には 'method = 'simple''を保つと、次のようにして自己ループを起こします。合計=外れ値の合計 – dimebucker91

+0

うーん...それは奇妙ですあなたが度数を1つ減らすと、method = "simple"はうまくいくはずです。私の元の答えでは、outとinの合計が混ざっています。あなたの例では、out = 307、in = 308です。それは問題ですか?そうでない場合は、どのigraphのバージョンを使用していますか?私はあなたの度の多くがノードの数よりも大きいので、 "simple.no.multiple"はこの例ではうまくいかないと思います。 –

関連する問題