首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不创建同一级别的关系的情况下随机改变二部网络中的关系

如何在不创建同一级别的关系的情况下随机改变二部网络中的关系
EN

Stack Overflow用户
提问于 2019-01-04 22:42:53
回答 1查看 156关注 0票数 1

我有一个没有方向的二分网络,在这里,我想在保持相同度分布的同时,随机地切换领带。

在in中,我使用了rewire()和keeping_degseq()函数来随机切换节点之间的边,如下所示。但是,这会导致在处于相同模式的节点之间创建边缘。对于此示例网络,节点1至10处于一种模式,节点11-14处于另一模式。

代码语言:javascript
运行
复制
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()函数不会在相同模式下在节点之间创建边?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-04 22:53:26

我们可以改变顶点,而不是用边来做一些事情:

代码语言:javascript
运行
复制
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第二个参数中被洗牌的顶点指数块。而不是考虑洗牌,一个简单的方法,以了解为什么这是工作的是,我们认为,我们只转换的名字的顶点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54047149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档