如何用statnet生态系统实现类似igraph的sample_degseq配置模型?
问题:statnet中实现igraph::sample_degseq类似功能的方法
我可以用igraph生成配置模型,代码如下:
set.seed(124) k_i <- rpois(10, 3) ## [1] 1 2 3 2 2 2 3 3 6 2 g <- igraph::sample_degseq(k_i, method = "vl") plot(g)
我可以用statnet工具恢复该网络的正确度直方图:
library(statnet) G <- intergraph::asNetwork(g) summary(G ~ degree(min(k_i):max(k_i)))
但反向操作时出现多个警告和错误:
m <- ergm(G ~ degree(min(k_i):max(k_i))) ## e.g. ## In mple.existence(pl) : The MPLE does not exist!
请问statnet系列包中是否有函数或步骤能实现与igraph的sample_degseq类似的效果?
解决方案
statnet生态中可以通过ergm包的simulate()函数,配合固定度序列的约束来实现与igraph::sample_degseq一致的配置模型生成效果,具体步骤如下:
- 创建空网络对象:先初始化一个节点数与目标度序列长度匹配的空网络(按需设置有向/无向):
library(statnet) set.seed(124) k_i <- rpois(10, 3) # 生成无向空网络,节点数等于度序列长度 empty_net <- network(length(k_i), directed = FALSE)
- 模拟符合度序列的网络:用
simulate()指定degree(k_i)约束,通过MCMC抽样生成配置模型网络:
# 生成匹配度序列的配置模型网络 config_net <- simulate(empty_net ~ degree(k_i), control = control.simulate(MCMC.burnin = 10000))
- 验证度序列匹配性:检查生成的网络度分布是否符合预期:
summary(config_net ~ degree(min(k_i):max(k_i)))
补充说明
- 你之前用
ergm(G ~ degree(...))报错的原因:该操作是拟合度序列模型,而非生成网络。当网络存在极端度值(如示例中节点度为6,总节点仅10)时,最大伪似然估计(MPLE)无法计算,因此报错。而我们上述方法是直接生成符合度约束的网络,不存在拟合参数的问题。 - 若仅需简单生成固定度序列的随机网络,也可使用
network包的sample.network(),但ergm的simulate()方法更贴近igraph::sample_degseq的抽样逻辑,适配性更强。
内容的提问来源于stack exchange,提问作者nmaclaren
相关产品推荐
相关产品推荐

