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): |
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 都很大,意味着什么?
两种可能:
- 只有一个真正的因果作用,但时间序列是自相关的,所以相邻几个滞后上都看到 MI,只是自相关造成的假象。
- 有两种(或更多)不同的因果机制,各自帮助预测呼吸。
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
也可以直接算两个滞后心率合起来给呼吸的总信息
另一种算法——链式法则:
老师课上是把条件互信息那项先写出来、再补另一项(顺序反过来),但本质都是链式法则:先算一个源,把它移到条件里,再加上另一个源的条件互信息。
二、统计显著性:理论(Part 1)
2.1 为什么需要
- 理论上:
独立。 - 实际上:用有限经验样本估计时,即使真正独立,也很容易测出非零值——就像前几周抛 10 次硬币测不出正好 1 bit 一样,这是有限样本的统计波动。
要回答的问题:一个估计值是否与 0 一致?它可能不严格等于 0,但实际上与 0 无法区分。
2.2 假设检验框架
- 零假设
: 与 独立 - 备择假设
:存在依赖,MI 非零 - p 值:如果
为真,得到等于或大于实测 MI 的值的概率
- 若
(通常 0.05)→ 拒绝 ,认为关系有意义——即使 MI 值很小,它也与 0 不同。
直觉:我们想知道「如果
2.3 Surrogate 分布(经验生成)
「Surrogate」意为「替身」:
- 按原顺序写下样本
和 ,配对保持原样,算出实测 MI。 - 把
的样本打乱(shuffle):- 保留
的边际分布 - 破坏
与 的联合依赖
- 保留
- 用
和打乱后的 算一次 MI → 一个 surrogate 值。 - 重复
次(每次重新打乱)→ 得到一整批 surrogate MI,画成经验直方图,就是 null distribution。 - 看实测值落在直方图的哪里,直方图中大于实测值的比例就是 p 值。
2.4 打乱的局限:时间序列
- 打乱对独立样本是合理的。
- 但如果是时间序列,打乱会破坏自相关,没有保留所有我们想保留的统计性质。
- 对时间序列,旋转(rotate,循环平移) 其中一条序列来生成 surrogate 更好——原理不变,仍是和一批 surrogate 比较。(自相关问题详见第六节 Item 5。)
2.5 条件互信息的显著性检验
- 打乱源
,但保持目标 和条件变量 在一起不动(保留它们之间的关系)。 - 这变成了一个有方向的检验,有一些细节上的微妙之处,但渐近意义下仍然成立——老师把细节留给视频。
2.6 附带用途:偏差修正与归一化
用 surrogate 做偏差修正:真的没有关系时应该得到 0,但因为有限样本误差得不到 0,所以
即减去 surrogate 分布的均值。
离散变量的归一化:由于
三、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 |
- 默认 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 | χ² 分布 | 各变量的维数(多变量时) |
具体形式(老师说不用背):在
一个顺带的推论:单变量 Gaussian 的零分布均值
nats——样本多 10 倍,零分布均值和宽度都缩到约 1/10,正好对应下面 Item 4 看到的现象。
JIDT 里:有解析形式的估计器,解析显著性的勾选框才可用;KSG 没有解析形式,所以这个框是灰的。换成 Gaussian 估计器就能勾。
| Bootstrap(重抽样) | 解析(χ²) | |
|---|---|---|
| 速度 | 慢 | 快得多 |
| 结果是否随机 | 是 | 否(只取决于样本数、维数等) |
| 准确性 | surrogate 足够多时最准 | 是近似,样本少时尤其不准,时间序列样本也有问题 |
四、需要多少样本 / 维度?(Part 3)
老师说这部分比较「挥手式」(hand-waving)。
4.1 两个问题
- 估计值是否与 0 不同? ← 用统计显著性回答
- 需要多少样本? ← 这个问题本身不够明确,得先说清楚想问的是什么:
| 真正想问的 | 答案 |
|---|---|
| 需要多少样本才能检测到显著关系? | 取决于关系有多强:关系越强,从噪声底里分辨出非零 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 时强显著的两个原因
- 样本多 → 实测 MI 更准,跳动更小(还会跳,但幅度小多了)
- 样本多 → 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. 统计显著性检查
- MI AutoAnalyser 选 KSG alg. 2,数据
SFI-heartRate_breathVol_bloodOx-extract.txt,源/目标列保持默认的 0(心率)和 1(呼吸),其他参数都保持默认(这里不看时滞)。 - 点 Generate code and Compute,确认结果约 0.135 nats,和上周一致。
- 勾选 Add stat. signif.?(默认 100 个 surrogates)再算:上周说 KSG 找到的非线性关系,在零模型下显著吗?
- 也可以对 Gaussian 做同样的检查:上周它给出的值非常小——是否与 0 一致(不显著)?
B. 控制自相关(本周重点)
为什么自相关是问题
自相关会让样本不再独立,而独立通常是估计器、尤其是显著性检验的前提假设:
| 受影响的地方 | 机制 |
|---|---|
| Linear-Gaussian 的解析显著性 | 把样本数 N 当参数用,但自相关时 N 不再能代表独立样本数。最近有论文报告了修正方法(老师组里的研究),但 JIDT 里还没实现 |
| KSG 估计本身 | 时间上相邻的样本在联合空间里也挨得很近 → 人为增加了近邻点 → 到第 k 个近邻的距离变小 → 边际空间里的计数变少 → MI 被人为抬高 |
| Surrogate 生成 | 重抽样破坏了源变量的自相关,所以计算里也要控制这一点 |
Gaussian 最简单的办法(JIDT 里没有):自己生成 surrogate,通过旋转其中一条时间序列。本课不要求做到这一步,但要知道有这个潜在问题。
第一步:看自相关有多长
import pandas |
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 需要回答的问题框架:
- 文章要解决什么问题?
- 用信息论度量回答的主要问题是什么?
- 分析什么类型的数据?做了哪些预处理?
- 用了哪些信息论度量?具体哪个估计器、参数怎么设?
- 你怎么看这个研究?优缺点、结论是否成立、可能的扩展等。
老师说这些论文会展示别人怎么用这些方法、怎么设参数、怎么解读结果——复现论文里的分析作为 project 是可以的。
八、Project 问答
8.1 任务概述
- 找一个合适的数据集,能用上一个或多个信息论度量。来源可以是:自己熟悉的领域或工作中的数据、自己跑模拟/实验生成的、网上的开放数据。讨论区有一个帖子列了一批开放数据集。
- 提出一组假设或问题来深挖这个数据集。
- 说明怎么预处理数据、怎么应用这些度量。
- 说明怎么解读结果。
两次提交:先交 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 再看 |
十、考点重点
- MI 是衡量偏离独立程度的统计量;理论上
独立,但有限样本几乎总是测出非零值。 - 假设检验:
独立; ; 拒绝 。 - Surrogate:打乱
→ 保留边际分布、破坏联合依赖 → 重复 次得经验零分布。时间序列用旋转(循环平移)更好,打乱会破坏自相关。 - CMI 的检验:打乱源,保持目标与条件变量在一起。
- 偏差修正:
;离散时可除以熵归一化到 。 - JIDT:默认 100 个 surrogates(太少,要精确就加);bootstrap 的 p 值是随机的。Discrete 和 Gaussian 有 χ² 解析零分布(快、确定,但近似,小样本和时间序列时不准);KSG 没有。
- 样本量:检测显著性所需样本取决于关系强度;避免欠采样取决于估计器(Gaussian < KSG)。离散启发式:N ≥ 3×(状态配置数),最好 ≥ 10×;状态配置数随字母表和维数指数增长。
- 样本多 → 零分布更窄 + 实测值更稳 → 弱关系更容易被检测。不显著 ≠ 没有关系。
- KSG 零分布以 0 为中心、可为负、比 Gaussian 宽得多 → 同样的(哪怕线性的)关系需要更多样本。
- 自相关:让样本不独立 → Gaussian 解析检验的 N
失真;KSG 近邻被时间相邻点污染导致 MI 被高估;用
DYN_CORR_EXCL(Theiler window)= 最大自相关长度 修正。 - 非平稳数据(如股价)不能直接分析,exclusion 窗口也救不了;取(log)差值转为平稳序列,同时也改变了问题本身。
- 多滞后都有 MI:可能是自相关假象,也可能是多个机制。用 CMI 区分——CMI = 0 表示冗余;CMI > 0 可能是独有信息或协同信息(或两者都有)。
- 链式法则
可以得到多变量 MI。 - Pointwise
MI:
computeLocalOfPreviousObservations(),顺序与输入样本一致;连续变量里是密度之比。
十一、下周预告
Week 8 — Module 8: Self-organisation and case studies:
- 视频讲座:定义自组织、度量信息的结构化
- 课上活动(Item 4):从 Ising 模型、MNIST、蚂蚁觅食里选一个,练习提出信息论问题 → 选变量 → 选估计器和参数 → 预判挑战 → 分析并得出结论
- 老师计划留约半小时讲 calculation exercises 的解答
- Week 8 结束后是期中假期,Project Proposal 在假期中截止