5.4 零模型比对:这网络到底特殊不特殊


5.4 零模型比对:这网络到底特殊不特殊

摘要:零模型是「保持某些量不变的随机化网络」,用于检验观测结构是否超出随机预期。本节装配两台主力机床:保度配置模型(随机重配边、度序列不动)与局部重连模型(度序列与局部结构双保全);给出 Z 分数的标准读法;并以聚类系数与传递性、网络 motifs 两案示范全流程;收尾讨论「保持什么不变」的选择艺术。本节在体系中的位置:仪表车间质检机,全册「读数自带参照系」纪律的总装线——第 3 章登记的聚类超额、第 5.2 节模块度的显著性,都在这里领到判决。

「特殊」必须先问「比什么随机」

车间质检的最后一问最容易被跳过:测出一个漂亮读数之后——聚类高出天际、模块度零点好几、三角形一麻袋——这到底算不算「特殊」?答案取决于你拿什么当「普通」。第 2 章用 ER 图当普通,但 ER 图连度序列都对不上号:拿它当基线比聚类,肥尾本身就能贡献超额三角形(高度节点天然容易互为邻居的邻居)——基线选错,结论整个作废。零模型的核心设计问题由此浮出水面:在随机化的同时保持哪些量不变。保得越多,零模型越「像」原网络,检验越严格;保得越少,基线越宽松,显著性的水分越大。

两台主力机床

配置模型(保度随机化):把每条边拆成两个半边,按节点度数分发半边,再两两随机配对——度序列严格保持,其他一切随机。它是「一阶零模型」,模块度公式里「期望项」的期望正来自于它;也是聚类显著性检验的默认基线。局部重连模型(马斯洛夫—斯内彭重连):随机挑两条边做双交换(保持四个端点的度不变),重复足够多次——它同时近似保持度序列与局部连接格局,是「二阶零模型」的实操版,比配置模型更严格,常用于 motifs 与局部结构检验。还有「保社团基线」等更严的变体——零模型是一族谱系,不是一台机器。

Z 分数是标准读数:观测值减去零模型均值,除以零模型标准差。绝对值过二约当百分位九五,过三约当百分位九九——但要注意零模型分布未必近似正态,严肃场合报告经验分位数。多重要多微小的结构一起检验时,还要做多重比较校正——一口气测几十种 motif,总有几种「恰好显著」,这是统计学的老坑,别让它坑了网络分析。

全流程案例一:聚类到底超不超额

第 3 章登记过「真实网络聚类超随机数倍」,但当时对照的是 ER 图——肥尾混杂未除。现在换配置模型重审:

import networkx as nx import random def configuration_rewire(G, swaps=None, seed=0): """度保持的双边交换零模型(简化配置模型)""" rng = random.Random(seed) H = G.copy() edges = list(H.edges()) if swaps is None: swaps = 10 * len(edges) for _ in range(swaps): (a, b), (c, d) = random.sample(edges, 2) if a not in (c, d) and b not in (c, d) and not H.has_edge(a, d) and not H.has_edge(b, c): H.remove_edge(a, b); H.remove_edge(c, d) H.add_edge(a, d); H.add_edge(b, c) edges = list(H.edges()) return H G = nx.karate_club_graph() C_obs = nx.average_clustering(G) nulls = [nx.average_clustering(configuration_rewire(G, seed=s)) for s in range(20)] mean = sum(nulls) / len(nulls) var = sum((x - mean) ** 2 for x in nulls) / len(nulls) z = (C_obs - mean) / (var ** 0.5) print(f"观测聚类 {C_obs:.3f} | 零模型均值 {mean:.3f} ± {var**0.5:.3f} | Z={z:.1f}")

读数给聚类超额盖上正式公章:在度序列完全相同的前提下,实测聚类仍远超随机预期——超额部分才是「三方闭包式组织」的净贡献,肥尾的混杂贡献已被扣除。这一步正是第 3 章预告的「保度零模型这道闸」,闸现在过完了。

全流程案例二:网络 motifs——零件级显著性

零模型的第二个经典应用在「零件」粒度:网络 motifs——统计网络中每种小三/四节点子图(三角形、链、星等)的出现次数,与零模型系综比对,找出「显著过量」的回路模式。生物网络的著名结论即由此而来:转录调控网络里特定的三节点回路(前馈回路)显著过量,被认为是基因调控的「可靠过滤电路」;不同物种的过量 motif 谱高度一致,提示深层的构建规律。motif 分析的流水线与本节完全同构:枚举子图计数、生成零模型系综、逐 motif 算 Z、多重比较校正——它把「结构特殊性」的检验下沉到元器件层面,是零模型哲学最漂亮的展品。

import networkx as nx import random def triad_counts(G): """简版:数三角形与开式三元组(两连边缺一边)""" tri = sum(nx.triangles(G).values()) // 3 open_v = 0 for v in G: nbrs = list(G[v]) for i in range(len(nbrs)): for j in range(i + 1, len(nbrs)): if not G.has_edge(nbrs[i], nbrs[j]): open_v += 1 return tri, open_v G = nx.karate_club_graph() tri_obs, open_obs = triad_counts(G) null_tri = [triad_counts(configuration_rewire(G, seed=s))[0] for s in range(15)] mean = sum(null_tri) / len(null_tri) sd = (sum((x - mean) ** 2 for x in null_tri) / len(null_tri)) ** 0.5 print(f"三角形:观测 {tri_obs} | 零模型均值 {mean:.1f} ± {sd:.1f} | " f"Z={(tri_obs-mean)/sd:.1f}")

三角形计数的 Z 值与案例一的聚类检验互为印证——两者本就是同一枚硬币(聚类系数就是三角形密度)。若把计数器换成「星形」「前馈回路」,流水线立即变成 motifs 分析——车间通用性尽在于此。

图 零模型质检流水线

图 零模型质检流水线

选择的艺术:保持什么不变

零模型的谱系按「保真度」排队,选型即立场。保度配置模型回答「去掉度分布后还剩什么特殊」;局部重连回答「再去掉局部格局后呢」;保社团零模型回答「社团内部还特殊吗」。每往上一档,检验换一个问题——所以「网络特殊吗」没有统一答案,只有「相对哪个零模型特殊」。实务两戒:一戒基线过松(拿 ER 图检验一切,显著注水);二戒基线过严(保持过多不变量后,想检验的性质本身也被保掉了——检验三角形就得允许重连三角形,零模型里它必须能自由变异)。零模型的选择,本质是把自己关于网络的假设摊开来接受审视。

⚠️ 常见坑:Z 分数跨网络不可直接比大小——零模型标准差随网络规模缩水,大网络的 Z 天然膨胀。跨网络比较要用标准化效应量的其他口径,或干脆报告「零模型分位数」。

本站收束

  • 零模型 = 保持指定量不变的随机化网络;「保持什么不变」决定了检验在问什么
  • 两台主力:保度配置模型(一阶)与局部重连(二阶);谱系可继续加严
  • Z 分数与经验分位数是标准读数;多重比较必须校正;Z 不跨网络比大小
  • 聚类超额在保度零模型下仍成立——三方闭包的净贡献拿到正式公章
  • motifs 检验把显著性下沉到零件级,是零模型哲学的旗舰应用

仪表车间全部竣工:四台设备(找要害、切块、算临界、验特殊)都已验收出厂。下一章网络放归野外——传播、级联、同步、舆论,四间动力学实验室同时开炉。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U