我有一个没有方向的二分网络,在这里,我想在保持相同度分布的同时,随机地切换领带。
在in中,我使用了rewire()和keeping_degseq()函数来随机切换节点之间的边,如下所示。但是,这会导致在处于相同模式的节点之间创建边缘。对于此示例网络,节点1至10处于一种模式,节点11-14处于另一模式。
library(igraph)
set.seed(1)
b <- sample_bipartite(10,4,type = "gnp", p = 0.5)
b2 <- rewire(b, keeping_degseq(niter = 100))
b2
由此产生的边是:
1 1-13 3-11 5-11 3-6 7-12 1-11 9-12 9-11 7-14 8-13 12-13 4-6 13-14 11-14 10-11 1-11-12 2-10 3-14 5-14 6-14 12-14 8-14 10-14
像12-13,3-6,13-14这样的边在相同模式下的节点之间,这是我在这个模拟中想要保留的原始网络的一个属性。
有什么不同的功能更符合我的目的吗?是否有一种方法可以告诉rewire()函数不会在相同模式下在节点之间创建边?
发布于 2019-01-04 22:53:26
我们可以改变顶点,而不是用边来做一些事情:
set.seed(1)
b1 <- sample_bipartite(10,4,type = "gnp", p = 0.5)
table(degree(b1))
# 1 2 3 4 5 6
# 4 3 2 2 2 1
(b2 <- permute(b1, c(sample(1:10), sample(11:14))))
# IGRAPH cf35948 U--B 14 20 -- Bipartite Gnp random graph
# + attr: name (g/c), p (g/n), type (v/l)
# + edges from cf35948:
# [1] 5--14 4--14 9--14 3--14 5--11 8--11 4--11 7--11 10--11 5--13 8--13 6--13
# [13] 7--13 3--13 10--13 5--12 4--12 2--12 1--12 10--12
table(degree(b2))
# 1 2 3 4 5 6
# 4 3 2 2 2 1
这种方法也很容易推广到多个社区。这一切都取决于permute
第二个参数中被洗牌的顶点指数块。而不是考虑洗牌,一个简单的方法,以了解为什么这是工作的是,我们认为,我们只转换的名字的顶点。
https://stackoverflow.com/questions/54047149
复制相似问题