CSYS5030 Week 12 有效网络推断讲课总结
CSYS5030 Week 12 讲课总结:Effective Network Inference
课程:CSYS5030 — Information Theory and Self-Organisation 讲师:Associate Professor Joseph Lizier 对应模块:Module 12 - Effective network inference 来源:讲义 PDF
Week 12/Lectures/Lec10-EffectiveNetworkInference.pdf+ tutorialDirectedFunctionalNetworkInference_Solutions.ipynb。本周没有转录稿,不包含讲课现场内容。 本周覆盖:网络推断的三种类型 → TE 有向功能网络(阈值 / p 值)→ 注意事项 → 多变量有效网络(贪心算法、IDTxl)版本说明:
Week 8/Lec8-EffectiveNetworkInference.pdf是旧版同名讲义(19 页)。对比两版:旧版把成对 TE 方法称为「effective network inference: basic / standard approach」,新版(本周)改称「directed functional network inference」并加了「better」字样;新版的注意事项中多了一条「需要正确设置 TE 参数,否则会有假阳性/假阴性」。本文以新版为准。
零、本周位置
信息动力学的最后一步:从单个目标的信息回归,推广到整个系统——给每个节点找出它的信息源(父节点)集合,就得到一张网络。
学习目标(讲义):
- 理解从时间序列做网络推断的不同选项,以及有效网络推断的复杂性与微妙之处;
- 能用 JIDT 做简单的(成对)有效网络推断;
- 理解更高级技术(如 IDTxl 工具箱)的优势。
主要参考:Bossomaier, Barnett, Harré & Lizier (2016) An Introduction to Transfer Entropy §7.2。
一、网络推断:三种类型
关键问题:只给定一组变量各自的时间序列,怎样构建一个能代表这些变量之间关系的网络模型?
| 类型 | 有向? | 依据 | 能告诉我们什么 | 局限 |
|---|---|---|---|---|
| 功能网络(functional) | ❌ 无向 | 通常用相关系数或 MI | 哪些节点之间有统计关系 | 不解释关系是如何产生的 |
| 结构网络(structural) | ✅ | 物理的、有向的(因果)连接 | 真实的「接线图」 | 一般只能通过干预获得,不能直接从大规模观测时间序列中得到;不反映随时间或实验条件变化的交互方式 |
| 有效网络(effective) | ✅ | 介于两者之间的混合 | 能复现并解释节点时间序列的「最小神经电路模型」 | 不是结构(因果)网络 |
(Sporns 2011 Networks of the Brain;Friston 1994 关于功能连接与有效连接。)
为什么有效网络虽不是因果网络却值得做:
- 可能是仅凭数据能做到的最好结果(因果往往无法获得);
- 能反映系统动态状态(regime)的变化;
- 为系统中发生的计算建模,揭示涌现的计算结构。
应用:建模/推断系统的底层信息网络;考察网络随条件、随时间的变化。领域包括神经影像、金融市场数据、基因调控网络、社交媒体分析、体育分析(如 RoboCup 机器人足球)等。
TE 是天然的选择:它有方向、条件于目标过去(建模的是目标的计算),且能扩展为条件 TE 处理多源。
二、用 TE 做有向功能网络推断
2.1 基础版:TE + 阈值
- 对系统中所有变量对计算成对 TE;
- 对 TE 值设阈值,保留超过阈值的连接。
在 JIDT 中:TE AutoAnalyser 勾选
All pairs?,会生成「对所有目标、对所有源」的双重循环。
讲义提问:
- 遇到的第一个问题是什么?——计算量:
个节点要算 个 TE;数据大时(如 10,000 个 CA 格子)根本跑不完(tutorial 里因此取消勾选Compute result?,只取前 100 个格子)。 - 阈值选多少?——没有原则性的答案;不同目标的 TE 量级可能不同,一个全局阈值很难处处合适(见 tutorial B)。
2.2 更好的版本:TE + p 值
- 计算所有变量对的成对 TE;
- 对每一对,求在零分布下得到观测 TE 的 p 值(见 Week 7 / Week 11);
- 对 p 值设阈值来选择连接。
优点:阈值是统计推导出来的,更有原则、更稳健,适合小数据集。
JIDT:勾选 All pairs? 和
Add stat. signif.?,生成的循环会给出每对的 p 值。
2.3 注意事项
1. 必须校正多重比较
- 族错误率(family-wise error rate, FWER):例如
Bonferroni 校正——把显著性阈值 α 除以检验次数
M。对
个节点的网络,通常 ,阈值会非常小。- 例:
⟹ , 。
- 例:
- 错误发现率(false discovery rate, FDR):控制被选中连接中假阳性的比例,比 Bonferroni 宽松。
为什么必须校正:若零假设全部为真,在 α = 0.05 下做 9900 次检验,预期约 495 条假连接。
2. 必须正确设置 TE 参数,否则会有假阳性/假阴性:
- 设置嵌入(目标嵌入不够 → 存储被误算成传递 → 假阳性);
- 设置源-目标延迟,例如在一个范围内扫描(延迟设错 → 漏掉真连接 → 假阴性)。
3. 不处理源之间的冗余或协同——讲义的三个示意结构:
| 结构 | 成对 TE 的问题 |
|---|---|
| 共同驱动:Z → Y、Z → X | 推断出虚假的 Y → X(冗余) |
| 路径:Y → Z → X | 推断出虚假的直接 Y → X(冗余) |
| 协同/门控:Y、Z 共同决定 X(如 XOR) | 单看 Y 或 Z 的成对 TE 可能都≈0,漏掉两条真连接 |
三、多变量有效网络推断
3.1 用条件 TE——但条件于什么?
- 条件 TE 正好能处理冗余和协同(Week 11)。
- 但条件于所有其他变量有两个问题:
- 太容易欠采样(条件变量维度太高);
- 会剔除太多连接——例如两个父节点高度冗余时,条件于对方后各自的 CTE 都≈0,两个都被删掉。
3.2 回到信息回归
两源情形(Week 11):
真正的目标是推断父节点集合
3.3 迭代 / 贪心算法
一次推断整个父节点集合在组合上太难(
- 嵌入目标过去(先处理存储);
- 从空的父节点集合
开始; - 对每个候选源,计算它到目标的 TE,条件于
; - 若条件 TE 最大的候选源的 p
值显著,就把它加入
; - 如果加入了新父节点,回到第 2 步;否则进入第 5 步;
- 剪枝:在最终集合
的语境下,删掉冗余的连接(早期加入的源可能在后来者面前变得多余); - 对整个父节点集合
做统计检验。
每加入一个父节点,信息回归就多一项:
这种方法的优点:
- 比暴力搜索父节点集合高效得多;
- 处理父节点之间的冗余和协同:冗余源在条件于已选父节点后 CTE 变小、不被选;协同源在条件于搭档后 CTE 变大、被选中;
- 可以对每个源扫描多个过去样本(非均匀嵌入);
- 统计检验提供「自动刹车」:数据的统计功效用尽时自然停止,避免过拟合/欠采样;
- 可以增加额外检验;
- 必须控制多重比较(例如 max statistics:在每一轮把最大的 CTE 与「所有候选源的最大值」的零分布比较);
- 最终结果是父节点集合——节点被选入的顺序不再重要。
讲义示意图:表格横向是变量(
- 左边是目标嵌入候选(
的过去),先选出目标嵌入; - 右边是源候选(其他变量各个过去时刻),逐个选出 source selections(父节点集合 P);
- 选中的不是「整个变量」而是变量在某个特定滞后的样本——这就是非均匀嵌入。
3.4 IDTxl
IDTxl(Information Dynamics Toolkit xl;Wollstadt, Lizier, Vicente et al. 2018;https://github.com/pwollstadt/IDTxl):
- 用 JIDT 作为内部信息论引擎的 Python 包;
- 实现了上述贪心算法,包括:
- 父节点选择中的 max statistics 多重比较校正;
- TE 参数选择、源的非均匀嵌入 / 延迟选择;
- 额外的步骤(剪枝)和统计检验。
对 project:想做网络推断的话,成对 TE(JIDT)可以做「有向功能网络」;真正的多变量有效网络用 IDTxl 更合适。
四、Tutorial:CA rule 54 上的网络推断
数据:Module 10 的 ca54.txt(rule 54,600 步 × 10,000
格子)。我们知道真实结构:每个格子的直接父节点只有左右两个邻居(以及它自己)。只取前
100
个格子(networkSize = 100),且这次把每个格子当作异质变量单独计算(不合并样本),所以每对只有约
600 个样本。
A. MI 功能网络
- MI AutoAnalyser:Discrete、勾
All pairs?、取消Compute result?、生成代码。 - 修改:
- 交换循环顺序,外层为目标
d、内层为源s(为后面的有向推断做准备); - 循环只到
networkSize; - 结果存入
results[s, d],删掉 print。
- 交换循环顺序,外层为目标
calc = MutualInformationCalculatorDiscrete(2, 2, 0) |
讨论:
- 结构:MI 矩阵对称(MI 无方向),且呈现模块化的块状结构:一大块区域内的格子两两 MI 都高,不只是相邻格子。
- 与真实因果结构对比:真实结构是「只有左右邻居」的窄对角带,MI 网络远不止于此。
- 块结构的来源:CA 动态中的大片 domain/blinker 区域——同一 domain 内的格子按同样的规则模式同步变化,彼此之间强相关,不管是否直接相连(共同的动态状态 → 冗余,正是功能网络「不解释关系如何产生」的体现)。
补充技巧:对没有自然排序的数据(不像 CA 有空间顺序),可以对 FC 矩阵做层次聚类并重新排序,以显示模块结构:
from scipy.cluster.hierarchy import linkage, optimal_leaf_ordering, leaves_list |
B. TE 有向功能网络
- 复制 MI 代码,把计算器换成
TE:
TransferEntropyCalculatorDiscrete(2, 4, 1, 1, 1, 1),k = 4——因为现在把变量当作异质的(不合并),每对只有约 600 个样本,不够支撑更大的 k(Module 10 合并全部格子时 k = 15)。 - 标题/标签把 MI 改成 TE。
讨论:
- 最强源的位置变了:TE 网络更集中在对角线两侧(左右邻居),开始给出更合理的动态模型。
- 块状结构仍然存在但减弱:TE 条件于目标过去,去掉了部分「同一 domain 内同步」带来的冗余;但 k = 4 太短,没能把 domain 的存储完全解释掉,剩余的存储信息还能从同块的其他格子「看到」。
- 能否选一个阈值处处适用? Solution 用
results > 0.09试——很难找到一个对所有目标都合适的阈值:有的目标真邻居的 TE 低于阈值,有的远处格子的 TE 高于阈值。
原则性阈值:解析 p 值 + Bonferroni
measDist = calc.computeSignificance() # 解析零分布 |
- p 值的含义:若源与目标的下一个值(在目标过去条件下)独立,得到大于等于观测 TE 的概率。
- 结果:有向功能网络抓住了两侧的直接父节点,阈值也有了原则。
- 但仍有很多不该出现的「父节点」——我们知道只有左右各一个才是直接父节点。怎么排除?⟹ 多变量方法。
C. 多变量有效网络(贪心算法演示代码)
结构:
for d in range(networkSize): |
Solution 输出节选(k = 4):
目标 0: 选 1 (TE=0.078);最大候选 26 不显著 (TE(26->0|1)=0.059, p=1.1e-4),停止 |
为什么仍不完全匹配真实结构(tutorial 列出的原因):
- 统计波动:短数据(约 600 样本/对)让「谁是最强源」受噪声影响——如目标 2 先选了隔一个的格子 0 而不是直接邻居 1;
- 统计功效有限;
- 硬编码的历史长度 k = 4 可能在虚假源中留下了更多信息(目标的存储没被完全解释);
- 没有剪枝步骤;
- 保守的 p 值阈值(Bonferroni)加上解析 surrogate(近似、假设独立样本)。
注意目标 2、3 中「真邻居」的 CTE 其实不小(0.10),但 p 值(2.4×10⁻⁵、6×10⁻⁶)刚好没过 Bonferroni 阈值 5.05×10⁻⁶——阈值的保守性直接导致假阴性。
D. 可选扩展(Solution 中的两个方案)
方案 1:为每个目标优化嵌入长度(像 Module 10 那样最大化偏差修正 AIS,k 扫到 20):
- 得到每个目标的最优 k 约为 4–6;
- 结果并没有明显变好:例如目标 0 连左邻 1 都不显著了(p = 4.4×10⁻⁵),目标 2 只选出 0、目标 3 只选出 1——更长的目标嵌入解释掉了更多信息,剩给源的更少,在严格阈值下更难显著。
方案 2:把历史长度硬编码为 k = 1——更接近因果结构:
目标 1: 选 0 (TE=0.377),选 2 (TE(2->1|0)=0.504),停止 ✓ |
- 为什么 k = 1 更好地复现因果结构?CA 的真实规则只依赖上一时刻的自己和两个邻居。k = 1 时目标过去只包含真实的「自身」父节点,两个邻居的贡献不会被更长的历史(存储)吸收,所以邻居的 CTE 很大(≈0.5 bits),而远处格子没有额外信息。
- 用更长 k 时,模型描述的是「以目标长历史为语境的信息处理」,这对理解计算(存储 vs 传递)有意义;但如果目的是尽量复现变量之间的因果结构,k 取因果上真实的历史长度(这里为 1)更合适。
这呼应了 Week 11 的「信息传递 ≠ 因果效应」:同样的数据,建模目的不同,参数选择就不同。
五、讲义小结
- 了解了从时间序列推断网络的不同选项,以及有效网络推断的复杂性和微妙之处;
- 能用 JIDT 做简单的有向功能网络推断;
- 理解 IDTxl 等更高级技术的优势;
- 下一讲:总结(Wrap-up)。
六、本周考点速记 / 易错点
- 三种网络:功能(无向、MI/相关、不解释机制);结构(因果连接、一般需干预、不反映动态变化);有效(有向、能复现并解释节点时间序列的最小模型)。样题第 20 题:有效网络 = 「构建有向网络,提供能复现并解释每个节点时间序列更新的最小多变量模型」。
- 「有向网络表示成对统计关系」是有向功能网络,不是有效网络。
- 有效网络虽非因果,但:可能是数据能做到的最好、反映动态状态变化、揭示涌现计算结构。
- 成对 TE + 阈值 → 成对 TE + p 值(统计导出的阈值,稳健、适合小数据)。
- 多重比较:Bonferroni
, ;或 FDR。 - 成对方法的三个问题:多重比较、TE 参数(嵌入、延迟)设错导致假阳/假阴、不处理冗余(共同驱动、路径)和协同(门控)。
- 条件于所有其他变量:欠采样 + 删掉太多连接(冗余父节点互相抵消)。
- 贪心算法:0 嵌入目标 → 1 空集 → 2 条件于 P 算各源 CTE → 3 最大且显著则加入 → 4 循环 → 5 剪枝 → 6 整体检验。高效、处理冗余与协同、可非均匀嵌入、统计检验做「自动刹车」、需多重比较校正(max statistics)、加入顺序最终无关。
- IDTxl:基于 JIDT,实现贪心算法 + max statistics + 参数/非均匀嵌入选择 + 剪枝。
- Tutorial:MI 网络对称、块状(domain 造成);TE 网络集中在邻居但阈值难定;p 值 + Bonferroni 更原则但仍有多余父节点;贪心多变量 + k = 1 最接近真实结构。
- 异质变量(不合并)时每对样本少 → 只能用较小的 k。
七、下周预告
Week 13 — Module 13: Wrap-up:课程学习目标回顾、本课覆盖与未覆盖的内容、「信息论就是问题与答案」,以及样卷与考试复习。