2015-05-21 40 views
0

我知道這裏已經有一個話題了,但我測試了他們在那裏說的方式,並沒有奏效。 我在加權圖中使用了rewire(),並且重量值未被轉移到隨機圖中。rewire()加權圖上的函數[igraph]

>E(g)$weight 
[1] 0.7819693 0.7010414 0.7978514 0.7249481 0.8295889 0.9177085 0.6719408 0.6826897 0.8947611 0.7758267 0.9064469 
[12] 0.8236665 0.7248115 0.7354699 0.7117599 0.7144824 0.7985431 0.6816086 0.6760310 0.8653517 0.7257873 0.8427769 
[23] 0.7097822 0.6987642 0.8507158 0.9149504 0.8357126 0.9664860 0.8338331 0.7122003 0.7504638 0.6995491 0.8643859 
[34] 0.8684505 0.8459311 0.7384111 0.7128058 0.7486494 0.8996575 0.8910186 0.7241546 0.7661719 0.7340575 0.8074797 
[45] 0.9107946 0.8758860 0.9171899 0.7134565 0.7687820 0.8112824 0.8735326 0.6853292 0.7392045 0.6772795 0.7064094 
[56] 0.7427759 0.8425719 0.9106251 0.8170464 0.8509228 0.7680797 0.7893403 0.8618796 0.7029206 0.6998891 0.9484128 
[67] 0.7075254 0.8204882 0.7728777 0.6936007 0.6737966 0.8568317 0.7938365 0.7372963 0.7554374 0.7738223 0.7363732 
[78] 0.6743658 0.7819415 0.7576451 0.8942746 0.7261943 0.7816130 0.8804163 0.8554249 0.7661933 0.7218388 0.8498031 
[89] 0.8146921 0.7871279 0.8496426 0.9418762 

>g2<-rewire(g,niter=1000) 
> is.weighted(g2) 
[1] TRUE 

> E(g2)$weight 
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
[39] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
[77] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 

igraph包是最新的,甚至隨機圖發生這種情況。抖動的邊緣沒有重量

> g1<-graph.ring(100) 
> plot(g1) 
> E(g1)$weight<-seq_len(ecount(g1)) 
> g3<-rewire(g1,niter=100) 
> is.weighted(g3) 
[1] TRUE 
> E(g3)$weight 
[1] 3 8 11 23 24 27 28 45 60 61 65 69 71 78 84 91 93 98 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
[38] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
[75] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 
> g3<-rewire(g1,niter=10) 
> E(g3)$weight 
[1] 1 2 3 4 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 22 24 25 26 27 28 29 30 32 
[29] 34 36 38 41 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 67 
[57] 68 69 71 72 73 74 76 77 78 79 80 81 83 84 85 86 87 89 90 91 92 94 98 99 100 NA NA NA 
[85] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 

這是一個錯誤還是我做錯了什麼? 它確實說它是加權的,但是所有的價值都是NA(至少是隨機的)。

> packageDescription("igraph")$Version 
[1] "0.7.1" 

有什麼想法或建議嗎?

編輯: 進一步在這個問題上,在這種情況下權重應該如何表現?例如,如果邊重A - B移動到A - C,其重量是否保持相同的值?還是應該改變(因此,所有其他),所以graph.strength分佈保持不變?

回答

1

這不是一個bug,而是缺少一個功能 - rewire()不支持邊權重。如果您不想保留邊緣的graph.strength()分佈,一個簡單的解決方法是取E(g1)$weight,對其進行洗牌,並將重新分配的洗牌矢量重新分配到E(g3)$weight

+0

我想維護'graph.strength()'分佈。但隨着rewire這是不可能的。保持'度'分佈將改變'graph.strength()'bc它改變權重。保持相同的'graph.strength()'分佈將需要改變所有權重,以適應新的圖形形狀。但是這增加了更多的問題。只是決定一路使用它未加權。 – Drizzt

+0

@Drizzt如何重新佈線以保存優勢並不十分清楚。突然增加權重使得邊緣可以區分:如果我們斷開邊緣與頂點的連接並重新連接另一個頂點,則保留其邊界的程度,但不會(通常)保持其強度。 – Szabolcs

+0

@Szabolcs的確如此。但是有一種數學方法來重新佈線並保持優勢。它在這篇數學論文中被形式化。它超出了我的能力,可以編碼http://www.uvm.edu/pdodds/files/papers/others/2006/serrano2006a.pdf此外,本白皮書還展示了它在網絡中的一個很好的應用https:/ /www.nature.com/articles/srep07258 – Drizzt