研究问题、可复现分析与敏感性分析06 / 16
随机性控制
网络分析中的随机性来源很多:Louvain/Leiden 等启发式算法的节点访问顺序、随机网络与度保持随机化、bootstrap 与置换检验、交叉验证的分割、随机梯度训练的图神经网络。随机性需要分两层处理。
第一层:可复算——记录并固定种子
- 在 Python 中用
numpy.random.default_rng(seed)创建独立的生成器并显式传递,而不是依赖全局状态;NetworkX 中有随机性的函数大多接受seed参数。 - 并行计算时,为每个进程派生独立的子种子(如 NumPy 的
SeedSequence.spawn),并记录主种子。Burger 等(2023)提醒:使用并行计算时,单纯设定一个种子并不一定能固定结果。 - 种子应在分析开始前确定(例如写进分析计划),而不是事后挑选。
第二层:稳健——结论不应依赖某一个种子
固定种子只保证别人能得到同一个随机结果,不能说明这个结果有代表性。对有随机性的算法,应报告多个种子下结果的分布:社团数、模块度 的范围,划分之间的一致性(如调整兰德指数),或基于多次运行的共识划分(见社团结构与社区发现)。
蒙特卡洛误差
用 个随机网络或 次置换估计的 分数和 值本身是带误差的估计量。
经验 值与蒙特卡洛标准误:若 次置换中有 次统计量不小于观测值,推荐的经验 值为 它保证在原假设下检验不会过于宽松,且永远不为 0(Phipson & Smyth 2010)。 的蒙特卡洛标准误近似为 。
算例:若真实 , 时标准误约 ,与 0.05 的差距只有半个标准误,换一个种子就可能越过阈值; 时标准误约 0.006。另一个常被忽视的事实是 的最小可达值为 :用 19 个随机网络做检验, 永远不可能小于 0.05;若还要做 100 次多重比较的 Bonferroni 校正,每个检验至少需要约 2000 次置换才有可能达到阈值。
“换种子直到显著”和“增加或减少置换次数直到显著”都是研究者自由度。随机网络数 和种子应事先确定并报告;如果结论在不同种子之间翻转,说明 不够大,或者效应本身处在边界上。