生物医学网络科学Biomedical Network Science
研究问题、可复现分析与敏感性分析06 / 16

随机性控制

阅读
约 2 分钟

网络分析中的随机性来源很多:Louvain/Leiden 等启发式算法的节点访问顺序、随机网络与度保持随机化、bootstrap 与置换检验、交叉验证的分割、随机梯度训练的图神经网络。随机性需要分两层处理。

第一层:可复算——记录并固定种子

  • 在 Python 中用 numpy.random.default_rng(seed) 创建独立的生成器并显式传递,而不是依赖全局状态;NetworkX 中有随机性的函数大多接受 seed 参数。
  • 并行计算时,为每个进程派生独立的子种子(如 NumPy 的 SeedSequence.spawn),并记录主种子。Burger 等(2023)提醒:使用并行计算时,单纯设定一个种子并不一定能固定结果。
  • 种子应在分析开始前确定(例如写进分析计划),而不是事后挑选。

第二层:稳健——结论不应依赖某一个种子

固定种子只保证别人能得到同一个随机结果,不能说明这个结果有代表性。对有随机性的算法,应报告多个种子下结果的分布:社团数、模块度 QQ 的范围,划分之间的一致性(如调整兰德指数),或基于多次运行的共识划分(见社团结构与社区发现)。

蒙特卡洛误差

用 BB 个随机网络或 BB 次置换估计的 zz 分数和 pp 值本身是带误差的估计量。

经验 pp 值与蒙特卡洛标准误:若 BB 次置换中有 bb 次统计量不小于观测值,推荐的经验 pp 值为 p̂=b+1B+1,\hat p = \frac{b+1}{B+1}, 它保证在原假设下检验不会过于宽松,且永远不为 0(Phipson & Smyth 2010)。p̂\hat p 的蒙特卡洛标准误近似为 p(1−p)/B\sqrt{p(1-p)/B}。

算例:若真实 p≈0.04p \approx 0.04,B=100B = 100 时标准误约 0.04×0.96/100≈0.020\sqrt{0.04 \times 0.96/100} \approx 0.020,与 0.05 的差距只有半个标准误,换一个种子就可能越过阈值;B=1000B = 1000 时标准误约 0.006。另一个常被忽视的事实是 p̂\hat p 的最小可达值为 1/(B+1)1/(B+1):用 19 个随机网络做检验,pp 永远不可能小于 0.05;若还要做 100 次多重比较的 Bonferroni 校正,每个检验至少需要约 2000 次置换才有可能达到阈值。

“换种子直到显著”和“增加或减少置换次数直到显著”都是研究者自由度。随机网络数 BB 和种子应事先确定并报告;如果结论在不同种子之间翻转,说明 BB 不够大,或者效应本身处在边界上。