2016-09-22 2 views
0

주어진 차수 분포에 따라 R에서 임의의 그래프를 생성하고 싶습니다. igraph 패키지에서 degree.sequence.game 기능을 사용하려고하지만 원하는대로하지 않습니다. 나는 질문을해야한다 :주어진 차수 분포를 기반으로 확률 방향성 네트워크를 R에 생성합니다.

(a)이 기능이 작동하기 위해서는 in and out degree에 어떤 조건들이 부과되어야 하는가? 예를 들면 :

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 

나는 링크 1> (3)가 3> 4 다음 경우, 나는 그것을 알고 싶다 있도록,이 몇 가지 구조를 소개하고 싶습니다 어떻게 든

답변

1

A). 귀하의 아웃도 (308)의 합계는 귀하의 학위 (307)의 합계보다 하나이기 때문에 자체 루프없이 임의의 그래프를 생성하는 것은 불가능합니다. 한 단계 씩 낮추면 코드가 작동합니다.

b). 소스 노드에 의해 정렬 된 가장자리 시퀀스를 요구하고 있습니까? 그렇다면이 같은 것이 작동 할 것입니다.

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

입출력 합이 같은 숫자 일 때'method = "simple.no.multiple"옵션을 사용할 수 있습니까? 나는 실제로 그 변화와 같은 오류를 얻는다 ... 그리고 사실 나는'method = 'simple'을 유지한다면'나는 여전히 합계 합계 = out degree sum을 만든 후에 자체 루프를 얻는다. – dimebucker91

+0

흠 ... 이상하다. ,도 = "단순"은 도수가 1 도씩 감소하면 작동합니다. 원래의 대답은 밖으로 나와 합계가 합쳐진 것입니다. 귀하의 예에서는 out = 307이고 in = 308입니다. 그게 문제 야? 그렇지 않다면 igraph의 어떤 버전을 사용하고 있습니까? 나는 "simple.no.multiple"이 많은 예제가 노드 수보다 많기 때문에이 예제에서는 작동하지 않는다고 생각합니다. –

관련 문제