CSYS5030 Week 07 Statistical Significance 讲课总结

CSYS5030 Week 07 讲课总结:Statistical Significance

课程:CSYS5030 — Information Theory and Self-Organisation 讲师:Associate Professor Joseph Lizier 对应模块:Module 7 - Statistical significance(Contents: Statistical significance of measures of information, and Undersampling) 来源:Week 07 seminar 字幕 + Canvas Module 7 页面(含 sample solution 图)+ Module 6 Item 8C + Module 8 Item 2 Lecture 覆盖:Module 6 Item 8C(上周剩下的)→ Module 7 视频要点 → Module 7 Item 4 → Project 问答 Tutorial 覆盖:Module 7 Item 5 + Module 8 Item 2(文献阅读)+ 做完本模块剩余活动

从这周开始 Module 编号和上课进度错位:先补完 Module 6 的最后一个练习,再讲 Module 7,tutorial 已经开始做 Module 8。老师说 Module 7 内容不多,所以课末留了时间回答 project 问题。


零、课程版图与本周位置

板块 周数 本周状态
1. Introduction to Information Theory Week 1–4 已完成
2. Empirical Analysis with Information Theory Week 5–8 进行中:W5 JIDT → W6 连续值估计器 → W7 统计显著性 → W8 用这些度量对真实数据提好问题
3. Information Processing in Complex Systems 期中假期后 信息的存储、传递、修改;多变量系统动态

本周定位:互信息衡量的是两个变量偏离独立的程度,是一个统计量,所以可以检验它的显著性——什么时候一个很小的值「与 0 一致」,什么时候它是有意义的?

时间线提醒:

  • 期中假期在 Week 8 之后;Project Proposal 在假期中截止(9 月 30 日,simple extension 到 10 月 5 日)。Canvas 上它被放在 Module 9 之后,但实际截止在 Module 9 之前。
  • 期末交视频 presentation + 代码(Week 13,11 月 8 日)。
  • Calculation exercises 的解答上周已发布;有问题的话今晚 tutorial 问更合适,下周老师会留大约半小时讲解(lecture 还是由 tutor 在 tutorial 讲,还没定)。

一、收尾 Module 6 Item 8C:心跳-呼吸的 pointwise MI

1.1 回顾上周结论

估计器 结果 解读
Linear-Gaussian ≈ 0 散点图上画最佳拟合直线基本是平的,心率提供不了关于呼吸的线性信息
KSG 小但明显更大(lag 0 约 0.135 nats) 可能存在非线性关系

上周 tutorial 从散点图得出的假设:

心率不极端时,呼吸量几乎总是在均值附近;一旦心率超过某个阈值,呼吸量落在均值附近的可能性下降,落在两端极值的可能性上升。 这就携带了一些信息——不多,但确实有,KSG 测到的大概就是这个。

1.2 连续变量上的 pointwise MI

  • 和离散时完全一样,只是 不再是概率质量,而是概率密度(也可以理解为密度在一个小区域上的积分,两种写法基本可互换)。
  • 它是逐样本的:「这个样本的 给了这个样本的 多少信息」,不是对变量的平均。
  • 对所有样本取期望就回到平均 MI;连续变量下这个期望变成按密度加权的积分,离散时是求和。

1.3 JIDT 代码:一行拿到所有 local MI

AutoAnalyser 不会生成这段。在构造 → initialise → 设属性 → 设数据 → 计算都做完之后,再向 calculator 查询:

localMIs = calc.computeLocalOfPreviousObservations()
  • 返回一个数组,每个样本一个 pointwise MI 值,顺序与输入样本完全一致(第一个值对应第一个心率样本与第一个呼吸样本的配对)。
  • 剩下的代码只是重画散点图,用 local MI 给点着色。

结果(老师展示的是 MATLAB 版的图,他说 Python 默认配色不太容易看出区分):

  • 高 pointwise MI 的点集中在心率高(约 85–92)且呼吸量偏高的区域,印证了上面的假设。心率极高时呼吸量偏低的点,local MI 没那么突出。
  • 解读:在这些样本里,一旦告诉你心率很高,出现这么极端呼吸量的概率就比不知道心率时高得多,而这件事确实发生了——所以心率「正向地」提供了关于极端呼吸量的信息。

⚠️ 老师现场踩的坑:演示时他发现自己 notebook 里用的其实是 Gaussian 估计器的代码,着色图才看不出区别。做这个练习要确认 calculator 是 KSG。

1.4 扫描 TIME_DIFF

不知道某个属性怎么在代码里设置时的通用方法:随便选个数据集生成一份代码 → 把该属性改成非默认值(比如 TIME_DIFF = 1)→ 重新生成 → 看代码里多出来的那行 setProperty(在 step 2),复制出来放进循环:

for lag in range(0, 16):
calc.setProperty("TIME_DIFF", str(lag)) # 属性必须是字符串
calc.initialise()
calc.setObservations(source, destination)
print("lag %d: MI = %.4f nats" % (lag, calc.computeAverageLocalOfObservations()))

Sample solution 图(KSG MI vs 心率→呼吸时滞,0–15):

lag 0 1–5 6 7 8 9 10 11 12–15
MI(nats,读图约值) ~0.135 0.09–0.105 ~0.13 ~0.144(最大) ~0.107 ~0.14 ~0.08 ~0.134 ~0.10

在不止一个滞后上都能从心率里找到关于呼吸的信息。

1.5 核心讨论:多个滞后上 MI 都很大,意味着什么?

两种可能:

  1. 只有一个真正的因果作用,但时间序列是自相关的,所以相邻几个滞后上都看到 MI,只是自相关造成的假象。
  2. 有两种(或更多)不同的因果机制,各自帮助预测呼吸。

Module 页面的追问:这些更早的心率值,提供的是相同还是不同的信息?怎么区分?

同学先说「算这两个心率值之间的 MI」——老师说这是个开始,但不够。正确工具是条件互信息:

  • 取 MI 最大的 lag 7 作为主信息源。
  • 对另一个滞后 ,算

CMI 结果 含义
= 0(排除偶然因素后) 没有新信息:它单独能提供的信息,在 lag 7 里已经都有了(冗余)
> 0 它提供了 lag 7 单独给不了的额外信息

老师进一步追问:CMI > 0 只有一种可能吗?(假设已经用显著性检验排除了偶然。)

回顾 Week 4:条件互信息不是「把另一个源的信息扣掉之后剩下的信息」,而是「在已经知道另一个源的语境下,这个源还能提供的信息」。这个语境同时做了两件事: - 去掉冗余(redundant)信息 - 引入协同(synergistic)信息——只有两个源合在一起看才能得到的信息(经典例子:XOR)

所以 CMI > 0 的额外信息可能是这个源独有的(unique),也可能是两者协同的(synergistic),或者两者都有。

1.6 可选扩展:两个源一起的多变量 MI

也可以直接算两个滞后心率合起来给呼吸的总信息 。Sample solution 最后两种都有。老师说很多人做 project 时想要的正是这种「两个源对一个目标」的分析,标准 tutorial 没覆盖,但代码和 AutoAnalyser 生成的差别不大。

另一种算法——链式法则:

老师课上是把条件互信息那项先写出来、再补另一项(顺序反过来),但本质都是链式法则:先算一个源,把它移到条件里,再加上另一个源的条件互信息。


二、统计显著性:理论(Part 1)

2.1 为什么需要

  • 理论上: 独立。
  • 实际上:用有限经验样本估计时,即使真正独立,也很容易测出非零值——就像前几周抛 10 次硬币测不出正好 1 bit 一样,这是有限样本的统计波动。

要回答的问题:一个估计值是否与 0 一致?它可能不严格等于 0,但实际上与 0 无法区分。

2.2 假设检验框架

  • 零假设 : 与 独立
  • 备择假设 :存在依赖,MI 非零
  • p 值:如果 为真,得到等于或大于实测 MI 的值的概率

  • 若 (通常 0.05)→ 拒绝 ,认为关系有意义——即使 MI 值很小,它也与 0 不同。

直觉:我们想知道「如果 和 分布相同,MI 会是什么样」。 > 这里「分布相同」不是严格相等——严格相等的话比值恰好是 1、log 恰好是 0、MI 恰好是 0。而是指在同样数量的有限样本、同样的统计波动下,两者会有一点抖动,这点抖动会把 MI 从 0 推开多少——这实际上就是 MI 测量的「噪声底」(noise floor)。

2.3 Surrogate 分布(经验生成)

「Surrogate」意为「替身」:

  1. 按原顺序写下样本 和 ,配对保持原样,算出实测 MI。
  2. 把 的样本打乱(shuffle):
    • 保留 的边际分布
    • 破坏 与 的联合依赖
  3. 用 和打乱后的 算一次 MI → 一个 surrogate 值。
  4. 重复 次(每次重新打乱)→ 得到一整批 surrogate MI,画成经验直方图,就是 null distribution。
  5. 看实测值落在直方图的哪里,直方图中大于实测值的比例就是 p 值。

2.4 打乱的局限:时间序列

  • 打乱对独立样本是合理的。
  • 但如果是时间序列,打乱会破坏自相关,没有保留所有我们想保留的统计性质。
  • 对时间序列,旋转(rotate,循环平移) 其中一条序列来生成 surrogate 更好——原理不变,仍是和一批 surrogate 比较。(自相关问题详见第六节 Item 5。)

2.5 条件互信息的显著性检验

  • 打乱源 ,但保持目标 和条件变量 在一起不动(保留它们之间的关系)。
  • 这变成了一个有方向的检验,有一些细节上的微妙之处,但渐近意义下仍然成立——老师把细节留给视频。

2.6 附带用途:偏差修正与归一化

用 surrogate 做偏差修正:真的没有关系时应该得到 0,但因为有限样本误差得不到 0,所以

即减去 surrogate 分布的均值。

离散变量的归一化:由于 ,有些人会除以熵,把 MI 缩放到 区间——文献里可能会看到。


三、JIDT 实现与解析方法(Part 2)

3.1 AutoAnalyser:勾选 Add stat. signif.?

勾上之后生成的代码会多输出:

  • 实测 MI 值
  • null(即 surrogate)分布的均值和标准差
  • p 值:在「源与目标无关」的零分布下,得到大于等于实测值的概率

老师演示的结果:null 均值约 0.0069,p 值为 0 → 非常显著。(std 字幕里记为 0.05,口述数字可能有听写误差。)

生成代码多了最后一步,大意是:

measDist = calc.computeSignificance(100)   # 默认 100 个 surrogates
print("MI = %.4f nats, null: %.4f +/- %.4f std; p(surrogate > measured) = %.5f"
% (result, measDist.getMeanOfDistribution(), measDist.getStdOfDistribution(), measDist.pValue))
  • 默认 100 个 surrogate 不算多,只是为了生成代码时跑得快。要精确结果就用更多 surrogate,更好地刻画零分布。
  • print 语句里就能看到怎么从结果对象里取出各个部分,其中 p 值最重要。

3.2 p 值是随机的

  • 因为是 bootstrap 抽样生成 surrogate,p 值本身有随机性;surrogate 越多,估计越好。
  • 老师反复点 Generate:null 的均值和标准差每次都在变。强显著时 p 值一直是 0 看不出变化,但弱关系时经常能看到 p 值跳动。

3.3 解析方法:χ² 分布

对部分估计器,零分布有已知的解析形式,不需要重抽样:

估计器 零分布 自由度取决于
Discrete / plug-in / ML χ² 分布 各变量的字母表大小
Linear-Gaussian χ² 分布 各变量的维数(多变量时)

具体形式(老师说不用背):在 下 (以 nats 计)近似服从 χ²,离散时自由度为 ,Gaussian 时为 。

一个顺带的推论:单变量 Gaussian 的零分布均值 nats——样本多 10 倍,零分布均值和宽度都缩到约 1/10,正好对应下面 Item 4 看到的现象。

JIDT 里:有解析形式的估计器,解析显著性的勾选框才可用;KSG 没有解析形式,所以这个框是灰的。换成 Gaussian 估计器就能勾。

Bootstrap(重抽样) 解析(χ²)
速度 慢 快得多
结果是否随机 是 否(只取决于样本数、维数等)
准确性 surrogate 足够多时最准 是近似,样本少时尤其不准,时间序列样本也有问题

四、需要多少样本 / 维度?(Part 3)

老师说这部分比较「挥手式」(hand-waving)。

4.1 两个问题

  1. 估计值是否与 0 不同? ← 用统计显著性回答
  2. 需要多少样本? ← 这个问题本身不够明确,得先说清楚想问的是什么:
真正想问的 答案
需要多少样本才能检测到显著关系? 取决于关系有多强:关系越强,从噪声底里分辨出非零 MI 所需样本越少
需要多少样本才能避免欠采样? 取决于估计器:Gaussian 看线性关系需要的样本比 KSG 少,因为它是 model-based,拟合一个模型比「什么关系都考虑」需要的数据少

4.2 离散数据的启发式

离散估计是在联合空间的每个格子里数样本。

  • 状态配置数(number of state configurations) = 联合空间里格子的总数 = 各变量字母表大小的乘积。
    • 例:、 都是二值 → 个配置。
  • 变量字母表越大,或变得越多变量(multivariate),状态配置数都会增加。

经验法则:

状态配置数(很低的下限)状态配置数(才比较像样)

  • 假设:各状态配置大致等可能。实际分布若偏斜、有些配置采样很少,需要更多样本。

Seinfeld 文本例子(27 个字符 = 26 个字母 + 空格):

分析 状态配置数 3× 下限 10× 建议
前 1 个字符 → 下一个 ~2,200 ~7,300
前 2 个字符 → 下一个 ~59,000 ~197,000

往回看的字符数每多一个,状态空间就指数增长。用这个启发式可以算出:给定这么多数据,最多往回看几个字符才不会欠采样。

4.3 连续数据的「粗略估算」

  • Kernel 估计器:kernel width 大致应该不超过变量的标准差。超过标准差时,要么实际上把变量二值化了,要么把分布完全抹平。可以把某个 kernel width 近似看作一种离散化,再套上面的思路估算能把维度推到多高。
  • KSG:会自动调整宽度,但它能调整的程度也有限(老师说再深入就超出课程范围了)。
  • 常识判断:只有 15 个样本却要用任何连续估计器 → 估计大概不会好;30 个样本还要做多变量 → 更糟。

课后有同学问这和「typical set」的思想是否相关——老师说思路相似,但这方面在信息论里「还没怎么被好好研究过」,需要更多工作。


五、Item 4:生成 surrogate 分布(lecture 里做)

5.1 设置

  • 用 AutoAnalyser 生成一份代码当起点(只是为了拿代码,不是为了分析那个数据集)。
  • 替换数据加载部分:
    • numSamples:样本数
    • numSurrogates:surrogate 数
    • 源:随机正态样本
    • 目标:coupling × 源 + 另一组随机正态样本(一开始 coupling = 0,即完全无关)
  • 从显著性结果对象的 distribution 成员里取出所有 surrogate 值,用 numpy histogram 画直方图,绿线标实测值。
  • 加标题和坐标轴标签——老师说这是 assignment 里的好习惯,而且要带单位(nats),他自己演示时忘了。

5.2 实验结果(sample solution 图,1000 个 surrogates)

# 样本数 N coupling 估计器 Surrogate 分布(读图) 实测值(读图约值) 结论
1 100 0 Gaussian 单侧,峰在 0,长尾到 ~0.055 nats ≈ 0,在分布中间 不显著
2 1000 0 Gaussian 单侧,尾部只到 ~0.0045 ≈ 0 不显著;分布窄了约 10 倍
3 1000 0.01 Gaussian 单侧,到 ~0.004 ~0.00085 在分布里 → 不显著
4 1000 0.05 Gaussian 单侧,主体 < 0.003 ~0.0022 在尾部边缘,每次运行结果不同
5 10000 0.05 Gaussian 主体只在 0–0.0005 ~0.00165 远在分布之外 → 强显著
6 1000 0.05 KSG 以 0 为中心对称,−0.06 ~ +0.06 ~−0.017 不显著

老师课上的实际运行:coupling = 0.01、N = 1000 时测到 0.0011 nats,p = 0.12,不显著;把 coupling 调大后,多跑几次有时显著、有时不显著。

5.3 逐条解读

① 样本多 → surrogate 分布变窄

猜想:样本越多估计越准;surrogate 代表「没有真实关系时」应得的值,越准就越贴近 0 ⟹ 分布越窄。 后果:同样的弱关系,样本多时更容易从 surrogate 分布里「冒出来」,更容易检测到。

② 不显著 ≠ 没有关系

第 3 组里确实有弱耦合,但 p = 0.12。不显著不说明一定没有关系,只是根据现有样本量无法断定有关系。 (老师口头说「这里我们接受零假设」;统计上更严谨的说法是「无法拒绝零假设」。)

③ 为什么结果每次跳动?(同学提问)

主要是因为实测 MI 本身依赖于那一批随机抽出的数据——样本少、耦合弱时,有时显得强、有时显得弱。surrogate 分布本身的随机性不是主要来源:多跑几次,它的范围基本不变,只有少数离群值在拉动。 实际分析里通常把所有样本一次性放进计算,拿到能得到的最好估计,所以你没得选。

④ N = 10000 时强显著的两个原因

  1. 样本多 → 实测 MI 更准,跳动更小(还会跳,但幅度小多了)
  2. 样本多 → surrogate 分布更窄,更容易被区分

⑤ KSG 的 surrogate 分布为什么不一样?

特征 Gaussian KSG 原因
形状 单侧,从不为负 以 0 为中心,近似高斯 KSG 内置偏差修正(老师:「Joe 讨厌的东西之一,以 B 开头」)——狠狠地做了偏差修正,零分布被移到 0 附近
负值 无 常见 小的负值就是「与 0 一致」
宽度 窄 宽得多(N = 1000 时 ±0.06,Gaussian 不到 0.01) KSG 对任何类型的关系都敏感,所以数据里的统计波动对它影响更大

结论:用 KSG 时,要把某个 MI 值和噪声底区分开需要更多数据——即使关系只是简单的线性关系也一样。 这组数据里的关系是我们自己造的线性高斯关系,Gaussian 估计器的模型完全对得上,所以它需要的样本少得多。可以自己试试 KSG 在这个数据集上需要多少样本才能测到显著性。


六、Item 5:重访心跳-呼吸分析(tutorial)

A. 统计显著性检查

  1. MI AutoAnalyser 选 KSG alg. 2,数据 SFI-heartRate_breathVol_bloodOx-extract.txt,源/目标列保持默认的 0(心率)和 1(呼吸),其他参数都保持默认(这里不看时滞)。
  2. 点 Generate code and Compute,确认结果约 0.135 nats,和上周一致。
  3. 勾选 Add stat. signif.?(默认 100 个 surrogates)再算:上周说 KSG 找到的非线性关系,在零模型下显著吗?
  4. 也可以对 Gaussian 做同样的检查:上周它给出的值非常小——是否与 0 一致(不显著)?

B. 控制自相关(本周重点)

为什么自相关是问题

自相关会让样本不再独立,而独立通常是估计器、尤其是显著性检验的前提假设:

受影响的地方 机制
Linear-Gaussian 的解析显著性 把样本数 N 当参数用,但自相关时 N 不再能代表独立样本数。最近有论文报告了修正方法(老师组里的研究),但 JIDT 里还没实现
KSG 估计本身 时间上相邻的样本在联合空间里也挨得很近 → 人为增加了近邻点 → 到第 k 个近邻的距离变小 → 边际空间里的计数变少 → MI 被人为抬高
Surrogate 生成 重抽样破坏了源变量的自相关,所以计算里也要控制这一点

Gaussian 最简单的办法(JIDT 里没有):自己生成 surrogate,通过旋转其中一条时间序列。本课不要求做到这一步,但要知道有这个潜在问题。

第一步:看自相关有多长

import pandas
axes = pandas.plotting.autocorrelation_plot(data[:,0]); axes.set_xlim([0, 50]) # 心率
axes = pandas.plotting.autocorrelation_plot(data[:,1]); axes.set_xlim([0, 50]) # 呼吸

MATLAB:autocorr(data(:,1))(需要 Econometrics Toolbox);没有的话可以用 zscore + xcorr(..., 20, 'normalized') + stem 近似。

  • 图里的水平线是自相关的显著性阈值。
  • 心率在滞后约 15 之前都显著自相关——回头看原始心率时间序列,这个长度很合理。

第二步:Dynamic Correlation Exclusion(Theiler window)

做法:为每个样本点找 k 个最近邻并计数时,直接忽略时间上太近的其他样本。也叫 serial correlation exclusion。

  • 「太近」怎么定:用自相关长度——自相关衰减到不显著的位置,或者第一次过零点。
  • 取两个变量里最大的自相关长度,设给属性 DYN_CORR_EXCL(即 Theiler window:从近邻计数里排除的相邻样本数)。

老师的直观解释:

KSG 会根据联合空间里的近邻来「量身定做」盒子宽度——采样密的地方窗口紧,采样稀的地方窗口放大。但数据强自相关时,找到的近邻很可能就是时间上紧挨着的样本,只是因为自相关,于是盒子会比本来应该的小得多。 这个修正保证找近邻时不看时间上太近的点,让近邻位置的采样更接近独立。

要回答:MI 估计值降了吗?还显著吗? 挑战任务:理想情况下,应该把之前所有心跳-呼吸分析都加上 DYN_CORR_EXCL 重跑一遍。

从现在开始做分析都要想:这个数据集自相关严重吗?用 KSG 的话要不要加这个属性? 老师举例:神经时间序列几乎总是强自相关,fMRI 尤其离谱,所以分析这类数据时一定要加。

平稳性:比自相关更根本的问题(老师的「支线」,但很重要)

例子:股价。某资产 5 年的价格时间序列自相关到非平稳的程度。

  • 平稳的意思:这里的样本和别处的样本可比吗?
  • 把数据放进信息论分析,就是假设所有样本都来自同一个底层过程。数据严重非平稳时,这个假设不成立,dynamic correlation exclusion 救不了——不要把这么非平稳的数据直接放进分析。

金融数据的常见预处理:不分析原始价格,而是分析相邻两天的差值,更常用的是 log 差值(log returns),这些平稳得多。

这实际上改变了问题:从「股票 X 和股票 Y 之间的 MI 是多少」变成「股票 X 和 Y 的每日(log)变化之间的关系是什么」——一个定义良好、能被很好估计的问题。 Module 8 tutorial 的论文里至少有一篇(金融市场那篇)就是取 log 差值来保证时间序列平稳。


七、Module 8 Item 2:文献中的信息论数据分析(tutorial)

形式:课上给一小段时间略读一篇文章,然后讲给同伴听。老师建议课前先精读一篇,课上的阅读时间就可以用来略读同伴要讲的那篇。

可选文章(也可以自己找):

文章 领域
M. Harré & T. Bossomaier, "Phase-transition-like behaviour of information measures in financial markets", Europhysics Letters 87, 18009 (2009) 金融市场(用 log 差值)
J. Jeong et al., "Mutual information analysis of the EEG in patients with Alzheimer's disease", Clinical Neurophysiology 112(5), 827–835 (2001) 神经科学 / EEG
S. Akhter et al., "Applying Shannon's information theory to bacterial and phage genomes and metagenomes", Scientific Reports 3, 1033 (2013) 基因组学

阅读时关注的 5 个要点——这其实就是 project proposal 需要回答的问题框架:

  1. 文章要解决什么问题?
  2. 用信息论度量回答的主要问题是什么?
  3. 分析什么类型的数据?做了哪些预处理?
  4. 用了哪些信息论度量?具体哪个估计器、参数怎么设?
  5. 你怎么看这个研究?优缺点、结论是否成立、可能的扩展等。

老师说这些论文会展示别人怎么用这些方法、怎么设参数、怎么解读结果——复现论文里的分析作为 project 是可以的。


八、Project 问答

8.1 任务概述

  1. 找一个合适的数据集,能用上一个或多个信息论度量。来源可以是:自己熟悉的领域或工作中的数据、自己跑模拟/实验生成的、网上的开放数据。讨论区有一个帖子列了一批开放数据集。
  2. 提出一组假设或问题来深挖这个数据集。
  3. 说明怎么预处理数据、怎么应用这些度量。
  4. 说明怎么解读结果。

两次提交:先交 proposal(期中假期),再交 video presentation + 分析用的代码(Week 13)。

资源:讨论区 Alex 已经发了 FAQ(提问前先查);Canvas 上有以前一个优秀 project 的示例 presentation。

下周:会给 3 个数据集(Module 8 Item 4:Ising 模型、MNIST 手写数字、蚂蚁觅食),留大量时间(主要在 tutorial,lecture 可能先开个头)练习对数据集提出有意思的问题。

8.2 什么是好问题?

老师:关于关系的问题远比关于熵的问题有意思。问变量的熵只能告诉你它有多不确定,关系才是重点。

可以问的方向:

  • 哪些变量之间关系最强——关系的「热点」在哪(比如一组股票里谁和谁最相关)
  • 关系随时间怎么变——分不同时间窗口看,变化和系统当时的状态是否吻合
  • 不同条件下关系怎么变——比如神经实验里对照组 vs 执行任务时,脑区之间的关系如何变化
  • 高阶关系——像今晚心跳-呼吸那样,不同滞后上的信息是相同还是不同,用条件互信息去追问
  • 逐样本的 pointwise 值——若样本来自时间序列,可以看关系如何动态地随时间变化
  • 网络关系建模——Module 12 会讲,感兴趣可以提前看找灵感

8.3 数据集的「该」与「不该」

明确不该:本课程里分析过的数据集(任务说明里有一个不完整的列表)。 > 原因:课上经常说「你可以在这个数据上做 X 或 Y」,老师不想看到 10 个人都在做他随口提的那个分析。

其他靠自己判断——用这门课学到的判断力:

  • 数据太短不合适:只有 10 或 15 个样本,「祝你好运能得到统计显著的结果」——一看样本数就应该知道。
  • 平稳性:如果数据不平稳,能不能以有意义的方式修正?
  • 老师建议花点时间认真挑数据集,别抓到第一个就用。

8.4 课后提问:「只有 10 个人」的数据集行不行?

同学:一个医疗数据集只有 10 个人,但每人都长时间测了多个变量——「样本数」指的是人数还是时间点数?

老师: - 如果问题是「个人特征 vs 是否患病」(比如小时候晒太阳多少 vs 是否得皮肤癌),10 个样本肯定不够。 - 但如果问题是「脑区 A 和脑区 B 之间的关系」,每个人都有很长的时间序列(比如每人 1000 个样本),就可以对每个人各算一次 MI,得到 10 个测量值——完全没问题。 - 关键是信息论度量本身用到的样本数。10 个受试者可以看作同一实验的 10 次重复,而不是「样本太少」。


九、参考阅读(非必读)

来源 说明
Lizier (JIDT) Appendix A.5 "Statistical significance testing" 本周主要参考,值得通读。倒数第二段提到的 transfer entropy 还没学,可以先跳过
Bossomaier et al. §4.5.1 只讲 transfer entropy 的显著性,建议等后面学完 TE 再看

十、考点重点

  1. MI 是衡量偏离独立程度的统计量;理论上 独立,但有限样本几乎总是测出非零值。
  2. 假设检验: 独立;; 拒绝 。
  3. Surrogate:打乱 → 保留边际分布、破坏联合依赖 → 重复 次得经验零分布。时间序列用旋转(循环平移)更好,打乱会破坏自相关。
  4. CMI 的检验:打乱源,保持目标与条件变量在一起。
  5. 偏差修正:;离散时可除以熵归一化到 。
  6. JIDT:默认 100 个 surrogates(太少,要精确就加);bootstrap 的 p 值是随机的。Discrete 和 Gaussian 有 χ² 解析零分布(快、确定,但近似,小样本和时间序列时不准);KSG 没有。
  7. 样本量:检测显著性所需样本取决于关系强度;避免欠采样取决于估计器(Gaussian < KSG)。离散启发式:N ≥ 3×(状态配置数),最好 ≥ 10×;状态配置数随字母表和维数指数增长。
  8. 样本多 → 零分布更窄 + 实测值更稳 → 弱关系更容易被检测。不显著 ≠ 没有关系。
  9. KSG 零分布以 0 为中心、可为负、比 Gaussian 宽得多 → 同样的(哪怕线性的)关系需要更多样本。
  10. 自相关:让样本不独立 → Gaussian 解析检验的 N 失真;KSG 近邻被时间相邻点污染导致 MI 被高估;用 DYN_CORR_EXCL(Theiler window)= 最大自相关长度 修正。
  11. 非平稳数据(如股价)不能直接分析,exclusion 窗口也救不了;取(log)差值转为平稳序列,同时也改变了问题本身。
  12. 多滞后都有 MI:可能是自相关假象,也可能是多个机制。用 CMI 区分——CMI = 0 表示冗余;CMI > 0 可能是独有信息或协同信息(或两者都有)。
  13. 链式法则 可以得到多变量 MI。
  14. Pointwise MI:computeLocalOfPreviousObservations(),顺序与输入样本一致;连续变量里是密度之比。

十一、下周预告

Week 8 — Module 8: Self-organisation and case studies:

  • 视频讲座:定义自组织、度量信息的结构化
  • 课上活动(Item 4):从 Ising 模型、MNIST、蚂蚁觅食里选一个,练习提出信息论问题 → 选变量 → 选估计器和参数 → 预判挑战 → 分析并得出结论
  • 老师计划留约半小时讲 calculation exercises 的解答
  • Week 8 结束后是期中假期,Project Proposal 在假期中截止