You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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一致的配置模型生成效果,具体步骤如下:

  1. 创建空网络对象:先初始化一个节点数与目标度序列长度匹配的空网络(按需设置有向/无向):
library(statnet)
set.seed(124)
k_i <- rpois(10, 3)
# 生成无向空网络,节点数等于度序列长度
empty_net <- network(length(k_i), directed = FALSE)
  1. 模拟符合度序列的网络:用simulate()指定degree(k_i)约束,通过MCMC抽样生成配置模型网络:
# 生成匹配度序列的配置模型网络
config_net <- simulate(empty_net ~ degree(k_i), 
                       control = control.simulate(MCMC.burnin = 10000))
  1. 验证度序列匹配性:检查生成的网络度分布是否符合预期:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:55:56