2016-05-13 18 views
-2

我有一個無向圖。我想爲此圖創建barabasi的無標度網絡模型。我想通過.dist參數來設置網絡中的邊數。但是,如果我將在out.seq中傳遞度數向量,那麼無向網絡中度數的總和將是邊數量的兩倍。因此,如何在我的網絡是undirected.My [R腳本設置此參數是在r中爲barabasi無標度模型設置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

+0

努力爲這些請幫助。 –

+0

如果你看''ba.game()',它表示傳入的第一個參數是頂點的數量而不是邊緣的數量,結果就是這種情況。 – Psidom

+0

@Psidom對不起,這是我的打字錯誤。那麼我也會得到13的邊數,而不是7 –

回答

1

它看起來像你想的一二的東西。如果你想準確度序列,然後你用(使用新的igraph函數名)好:

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

如果你想有一個Barabasi優先連接網絡,然後這是一個有點困難指定邊緣的確切人數。我回答了一個similar question here,其中有一個小函數可以生成正確的參數。

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 

據我所知,沒有辦法繼續添加邊緣,直到你打你的報價。在我連接的答案中,我只是添加了一些隨機邊緣,因爲只要圖形不太密集,通常不會那麼多。

+0

謝謝你的答案。 sample_degseq函數不過是具有給定度分佈的廣義隨機網絡模型。這是配置模型。但是,如果我們提供的隨機網絡度分佈與我們實際網絡的度分佈相同,那麼就沒有辦法比較隨機網絡模型和現實生活模型。 –

+0

好吧,通過發送到out.seq的程度,它看起來像你想要的程度分佈。我提供了兩個,因爲它不清楚你想要什麼。所以第二個可能是你需要的。 – dougmet

+0

您是否發現了底下的sample_pa選項? – dougmet