量化交易中文教材

第 15 章 独立性推断

本章对应 Wasserman 原书第 15 章。本章回答两个问题:两个随机变量是否独立?如果不独立,依赖有多强?原书按变量类型分成四种情形——两个二元变量、两个离散变量、两个连续变量、一个离散一个连续——每种情形给出相应的检验与依赖度量。核心工具是列联表上的似然比检验与 Pearson \(\chi^2\) 检验、优势比,以及两样本 Kolmogorov–Smirnov 检验。

对量化研究来说,这一章提供了"信号有没有用"的最朴素、也最不依赖模型的检验方式:把信号方向与随后涨跌做成一张表,看它们是否独立。本章也会说明这种检验在金融时间序列上最容易出错的地方。

学习目标

  1. 会把两个分类变量的数据整理为列联表,理解点下标记号 \(X_{i\cdot}\)、\(X_{\cdot j}\)。
  2. 会计算 \(2\times2\) 表和 \(I\times J\) 表的似然比统计量 \(T\) 与 Pearson 统计量 \(U\),知道其自由度为 \((I-1)(J-1)\)。
  3. 会估计优势比与对数优势比,用 Delta 方法求标准误,并在对数尺度上构造置信区间。
  4. 理解"不相关"与"独立"的区别;会用两样本 KS 检验处理一个离散、一个连续变量的情形。
  5. 理解多项抽样、队列抽样、病例对照抽样三种设计下优势比都可估计,而风险差在病例对照设计下不可估计;能把这一点联系到量化中的"按结果抽样"偏差。

读前导读

这一章在解决什么问题

一句话:两个东西之间到底有没有关系,关系有多强? 这是信号研究最朴素的问题。把"信号看多/看空"和"次日涨/跌"交叉统计成一张 2×2 表,如果信号无用,看多时的上涨比例应当和看空时一样;本章给出判断"一样不一样"的正式检验(似然比 \(T\)、Pearson \(\chi^2\) 的 \(U\)),以及衡量关系强度的指标(优势比)。

CFA 里你学过用相关系数衡量两个变量的关系,也学过 \(\chi^2\) 分布用于方差检验。本章的不同之处在于:它不要求变量是连续的数值(可以是涨/跌、违约/不违约、行业类别),也不要求关系是线性的。章中一个对量化特别重要的提醒是"不相关不等于独立":股票收益今天与昨天几乎不相关,但今天的波动大小与昨天强相关,这就是波动聚集。另一个提醒是"按结果抽样":只研究暴跌股或违约公司时,能估计相对强度,但估计不了绝对概率。

需要先想起来的数学

1. 独立的定义。 \(P(Y=i,Z=j)=P(Y=i)P(Z=j)\) 对所有 \(i,j\) 成立,即"联合概率 = 边际概率之积"。等价说法:知道 \(Z\) 不改变 \(Y\) 的条件分布。例:上涨概率 50%,看多信号出现概率 40%,若二者独立,"看多且上涨"的概率应为 20%。参见 第 00 册第 07 章 概率中的分析工具。

2. \(\chi^2\) 分布与自由度。 \(\chi^2_\nu\) 是 \(\nu\) 个独立标准正态平方之和,均值 \(\nu\)。检验统计量远大于自由度时就是证据。常用临界值:\(\chi^2_{1,0.05}=3.84\)(即 \(1.96^2\)),\(\chi^2_{4,0.05}=9.49\),\(\chi^2_{6,0.05}=12.59\)。

3. Delta 方法的多元版。 \(g(\hat p)\) 的方差 \(\approx\nabla g^T\,\mathbb V(\hat p)\,\nabla g\),其中 \(\nabla g\) 是 \(g\) 对各分量的偏导排成的向量。和组合方差 \(w^T\Sigma w\) 结构相同:偏导数扮演"权重"。参见 第 00 册第 05 章 多元微积分与优化。

4. 上确界 \(\sup\) 与经验分布函数。 \(\sup_x|\hat F_1(x)-\hat F_2(x)|\) 指"在所有 \(x\) 上两条曲线垂直距离的最大值"。经验分布函数 \(\hat F(x)\) 是"样本中不超过 \(x\) 的比例",是一条从 0 升到 1 的阶梯线。参见 第 00 册第 01 章 函数极限与连续。

5. 二阶泰勒展开(只在 \(T\approx U\) 的说明中用到)。参见 第 00 册第 02 章 导数与泰勒展开。

记号:\(Y\amalg Z\) 读作"\(Y\) 与 \(Z\) 独立";\(X_{i\cdot}\) 中的点表示"对这个下标求和";\(\rightsquigarrow\) 表示"大样本下的分布趋于";\(I(\cdot)\) 是示性函数,括号内条件成立取 1,否则取 0。

怎么读这一章

核心必读:15.2(2×2 表、两种检验、优势比及其区间)、15.4(不相关 ≠ 独立)、15.6 中"病例对照设计不能估计什么"与"按结果抽样"、15.7 实战的四条读法。15.3 是 15.2 的直接推广,扫一遍记住自由度公式即可。定理 15.6 的 Delta 方法证明和定理 15.12 的 KS 极限分布第一次可以只看结论。


15.1 记号与基本思路

用 \(Y\amalg Z\) 表示 \(Y\) 与 \(Z\) 独立,\(Y\not\amalg Z\) 表示不独立。不独立也常被称为相依(dependent)、关联(associated)或相关(related)。原书一开始就提醒:关联不意味着因果,这是第 16 章的主题。

检验独立性的思路在各种情形中都一样:在"独立"的约束下拟合一个模型,在"不受约束"的情况下拟合另一个模型,比较二者对数据的拟合差距。差距大就拒绝独立。这正是第 10a 章似然比检验的思想。


15.2 两个二元变量

列联表与优势比

设数据 \((Y_1,Z_1),\dots,(Y_n,Z_n)\) 中 \(Y,Z\in\{0,1\}\)。把数据汇总为 \(2\times2\) 列联表(contingency table),\(X_{ij}\) 表示满足 \(Y=i\)、\(Z=j\) 的观测个数:

\(Z=0\) \(Z=1\) 合计
\(Y=0\) \(X_{00}\) \(X_{01}\) \(X_{0\cdot}\)
\(Y=1\) \(X_{10}\) \(X_{11}\) \(X_{1\cdot}\)
合计 \(X_{\cdot0}\) \(X_{\cdot1}\) \(n=X_{\cdot\cdot}\)

点下标表示对该下标求和:\(X_{i\cdot}=\sum_jX_{ij}\),\(X_{\cdot j}=\sum_iX_{ij}\)。这一记号在原书余下部分一直沿用。对应的概率表为 \(p_{ij}=\mathbb P(Y=i,Z=j)\),边际为 \(p_{i\cdot},p_{\cdot j}\)。计数向量 \(X=(X_{00},X_{01},X_{10},X_{11})\) 服从 \(\text{Multinomial}(n,p)\)(第 14 章)。

定义 15.1。 优势比(odds ratio)

\[\psi=\frac{p_{00}p_{11}}{p_{01}p_{10}},\tag{15.1}\]
对数优势比(log odds ratio)\(\gamma=\log\psi\)。(15.2)

定理 15.2。 以下命题等价:(1) \(Y\amalg Z\);(2) \(\psi=1\);(3) \(\gamma=0\);(4) 对所有 \(i,j\in\{0,1\}\),\(p_{ij}=p_{i\cdot}p_{\cdot j}\)。

(1) 与 (4) 等价就是独立的定义。(2) 的直观意义在 15.6 节解释:\(\psi\) 是"\(Y=1\) 组中 \(Z=1\) 的优势"除以"\(Y=0\) 组中 \(Z=1\) 的优势",等于 1 说明两组没有差别。

两种独立性检验

检验 \(H_0:Y\amalg Z\) 对 \(H_1:Y\not\amalg Z\)。(15.3)

定理 15.3(似然比检验)。 在 \(H_1\) 下,最大似然估计为 \(\hat p_{ij}=X_{ij}/n\);在 \(H_0\) 下,受约束的最大似然估计为 \(\hat p_{ij}=\hat p_{i\cdot}\hat p_{\cdot j}=\frac{X_{i\cdot}}n\frac{X_{\cdot j}}n\)。似然比统计量为

\[T=2\sum_{i=0}^1\sum_{j=0}^1X_{ij}\log\left(\frac{X_{ij}X_{\cdot\cdot}}{X_{i\cdot}X_{\cdot j}}\right).\tag{15.4}\]
在 \(H_0\) 下 \(T\rightsquigarrow\chi^2_1\),当 \(T>\chi^2_{1,\alpha}\) 时拒绝 \(H_0\)。

自由度的来历:不受约束时有 3 个自由参数(4 个概率和为 1),独立时只有 2 个(\(p_{1\cdot}\) 与 \(p_{\cdot1}\)),相差 1。

推导拆解:

  1. 多项分布的对数似然(去掉常数)是 \(\sum_{ij}X_{ij}\log p_{ij}\)(第 14 章定理 14.5)。
  2. 不受约束的最大值:代入 \(\hat p_{ij}=X_{ij}/n\)。
  3. 独立约束下 \(p_{ij}=p_{i\cdot}p_{\cdot j}\),对数似然变成 \(\sum_iX_{i\cdot}\log p_{i\cdot}+\sum_jX_{\cdot j}\log p_{\cdot j}\),行和列分开最大化,各自又是一个多项问题,得 \(\hat p_{i\cdot}=X_{i\cdot}/n\)、\(\hat p_{\cdot j}=X_{\cdot j}/n\)。
  4. 似然比统计量 \(=2\times\)(无约束最大对数似然 − 受约束最大对数似然)\(=2\sum X_{ij}\big[\log\frac{X_{ij}}n-\log\frac{X_{i\cdot}X_{\cdot j}}{n^2}\big]\),合并对数即 (15.4)。 每一项 \(X_{ij}\log(X_{ij}/E_{ij})\) 比较的是"观测到的格子频数"与"独立时应有的频数",观测多于期望则为正,少于期望则为负,加权求和后整体非负。

定理 15.4(Pearson \(\chi^2\) 检验)。 令 \(E_{ij}=X_{i\cdot}X_{\cdot j}/n\) 为独立假设下的期望频数,

\[U=\sum_{i=0}^1\sum_{j=0}^1\frac{(X_{ij}-E_{ij})^2}{E_{ij}}.\tag{15.5}\]
在 \(H_0\) 下 \(U\rightsquigarrow\chi^2_1\)。

\(U\) 的直观意义非常清楚:\(E_{ij}=n\hat p_{i\cdot}\hat p_{\cdot j}\) 是"如果独立,这个格子里应该有多少观测",\(U\) 衡量观测频数与期望频数的标准化差距。\(T\) 与 \(U\) 在 \(H_0\) 附近渐近等价(对 \(x\log(x/e)\) 在 \(x=e\) 处做二阶 Taylor 展开即得 \(T\approx U\)),实际数值通常很接近。

例 15.5(扁桃体切除与霍奇金病)。 Johnson 与 Johnson(1972)的数据:

切除扁桃体 未切除 合计
霍奇金病 90 84 174
无霍奇金病 165 307 472
合计 255 391 646

似然比统计量 \(T=14.75\),p 值 \(\mathbb P(\chi^2_1>14.75)=0.0001\);Pearson 统计量 \(U=14.96\),p 值 0.0001。拒绝独立假设:扁桃体切除与霍奇金病之间存在关联。

推导拆解(手算 \(U\)):期望频数 \(E_{ij}=\) 行合计 × 列合计 / 总数。左上格 \(E=174\times255/646\approx68.7\),观测 90,多出 21.3。2×2 表中四个格子偏离的绝对值相同(行列合计固定,一格多了,同行同列的格子就得少),都是 21.3。其余三格期望为 \(174\times391/646\approx105.3\)、\(472\times255/646\approx186.3\)、\(472\times391/646\approx285.7\)。于是 \(U=21.3^2\times(\frac1{68.7}+\frac1{105.3}+\frac1{186.3}+\frac1{285.7})\approx453.7\times0.0330\approx14.96\)。期望频数小的格子,同样的偏离贡献更大。

但这不意味着切除扁桃体导致霍奇金病。原书举了一种可能:医生也许倾向于给病情较重的病人做扁桃体切除,于是"病重"这一共同因素同时关联了两者。(另外,这份数据实际上来自病例对照研究,15.6 节会说明这对估计意味着什么。)

依赖强度:估计优势比

定理 15.6。 优势比与对数优势比的最大似然估计为

\[\hat\psi=\frac{X_{00}X_{11}}{X_{01}X_{10}},\qquad\hat\gamma=\log\hat\psi.\tag{15.6}\]
由 Delta 方法,渐近标准误为
\[\widehat{\text{se}}(\hat\gamma)=\sqrt{\frac1{X_{00}}+\frac1{X_{01}}+\frac1{X_{10}}+\frac1{X_{11}}},\qquad\widehat{\text{se}}(\hat\psi)=\hat\psi\,\widehat{\text{se}}(\hat\gamma).\tag{15.7–15.8}\]

证明思路(原书习题 3)。 \(\hat\gamma=\log\hat p_{00}+\log\hat p_{11}-\log\hat p_{01}-\log\hat p_{10}\) 是 \(\hat p\) 的函数,梯度为 \(\nabla g=(1/p_{00},-1/p_{01},-1/p_{10},1/p_{11})\)。多项分布 \(\mathbb V(\hat p)=\frac1n(\text{diag}(p)-pp^T)\),于是

\[\mathbb V(\hat\gamma)\approx\frac1n\Big[\sum_{ij}\frac1{p_{ij}}-(\nabla g^Tp)^2\Big]=\frac1n\sum_{ij}\frac1{p_{ij}},\]
因为 \(\nabla g^Tp=1-1-1+1=0\)。代入 \(\hat p_{ij}=X_{ij}/n\) 即得 (15.7)。

推导拆解:

  1. 梯度:\(g=\log p_{00}-\log p_{01}-\log p_{10}+\log p_{11}\),对 \(p_{00}\) 求偏导得 \(1/p_{00}\),依此类推,符号跟着 \(\pm\) 走。
  2. 多元 Delta 方法:\(\mathbb V(\hat\gamma)\approx\nabla g^T\,\mathbb V(\hat p)\,\nabla g\)。\(\mathbb V(\hat p)\) 来自第 14 章:对角元 \(p_{ij}(1-p_{ij})/n\),非对角元 \(-p_{ij}p_{kl}/n\),写成矩阵即 \(\frac1n(\text{diag}(p)-pp^T)\)。
  3. 分两块算:\(\nabla g^T\text{diag}(p)\nabla g=\sum_{ij}p_{ij}\cdot(1/p_{ij})^2=\sum_{ij}1/p_{ij}\);\(\nabla g^Tpp^T\nabla g=(\nabla g^Tp)^2\),而 \(\nabla g^Tp=\sum\pm p_{ij}/p_{ij}=1-1-1+1=0\)。
  4. 最后 \(\frac1n\sum\frac1{p_{ij}}\) 中代入 \(p_{ij}\approx X_{ij}/n\):\(\frac1n\cdot\frac n{X_{ij}}=\frac1{X_{ij}}\)。 读法:标准误由最小的格子主导。四格分别为 500、500、500、10 时,\(\sqrt{3/500+1/10}\approx0.33\),几乎全部来自那个只有 10 个观测的格子。这在稀有事件(违约、暴跌)研究中很常见。

注 15.7(小样本修正)。 小样本时 \(\hat\psi\) 的方差可能很大;某个格子为 0 时 \(\hat\psi\) 甚至无定义。常用的修正是每格加 \(\frac12\):

\[\tilde\psi=\frac{(X_{00}+\frac12)(X_{11}+\frac12)}{(X_{01}+\frac12)(X_{10}+\frac12)}.\tag{15.9}\]

检验与区间。 关于 \(\gamma=0\) 的 Wald 检验统计量为 \(W=\hat\gamma/\widehat{\text{se}}(\hat\gamma)\);\(\gamma\) 的 \(1-\alpha\) 置信区间为 \(\hat\gamma\pm z_{\alpha/2}\widehat{\text{se}}(\hat\gamma)\)。\(\psi\) 的置信区间有两种做法:直接用 \(\hat\psi\pm z_{\alpha/2}\widehat{\text{se}}(\hat\psi)\);或先在对数尺度上构造区间再取指数:

\[\Big(\exp\big(\hat\gamma-z_{\alpha/2}\widehat{\text{se}}(\hat\gamma)\big),\ \exp\big(\hat\gamma+z_{\alpha/2}\widehat{\text{se}}(\hat\gamma)\big)\Big).\tag{15.10}\]
后者通常更准确:\(\hat\psi\) 取值于 \((0,\infty)\)、分布右偏,对数变换后更接近正态,而且区间不会出现负数下限。这与第 14 章 Fisher \(z\) 变换、第 09 章 logit 变换是同一个思路。

例 15.8。 扁桃体数据中

\[\hat\psi=\frac{90\times307}{165\times84}=1.99,\qquad\hat\gamma=\log1.99=0.69.\]
切除过扁桃体的人患霍奇金病的优势约为未切除者的两倍。(表中行是患病与否、列是是否切除,按定义 15.1 直接算出的是"患者 vs 非患者"的切除优势比;由 15.6 节的对称性,它同时等于"切除者 vs 未切除者"的患病优势比,所以可以这样解读。)\(\widehat{\text{se}}(\hat\gamma)=\sqrt{1/90+1/84+1/165+1/307}=0.18\),Wald 统计量 \(W=0.69/0.18=3.84\),p 值 0.0001。\(\gamma\) 的 95% 置信区间为 \(0.69\pm2(0.18)=(0.33,1.05)\),\(\psi\) 的 95% 置信区间为 \((e^{0.33},e^{1.05})=(1.39,2.86)\)。


15.3 两个离散变量

推广到 \(Y\in\{1,\dots,J\}\)、\(Z\in\{1,\dots,I\}\)。数据汇总为 \(I\times J\) 列联表,\(X_{ij}\) 为满足 \(Z=i\)、\(Y=j\) 的观测个数。检验 \(H_0:Y\amalg Z\)。(15.11)

定理 15.9。 似然比统计量

\[T=2\sum_{i=1}^I\sum_{j=1}^JX_{ij}\log\left(\frac{X_{ij}X_{\cdot\cdot}}{X_{i\cdot}X_{\cdot j}}\right)\tag{15.12}\]
在 \(H_0\) 下渐近服从 \(\chi^2_\nu\),\(\nu=(I-1)(J-1)\)。Pearson 统计量
\[U=\sum_{i,j}\frac{(X_{ij}-E_{ij})^2}{E_{ij}},\qquad E_{ij}=\frac{X_{i\cdot}X_{\cdot j}}{n}\tag{15.13}\]
也渐近服从 \(\chi^2_\nu\)。

自由度:不受约束时有 \(IJ-1\) 个参数,独立时有 \((I-1)+(J-1)\) 个,相减得 \((I-1)(J-1)\)。

白话解释:另一种数自由度的方式:行合计和列合计都已知时,表里有多少格可以随便填?前 \(I-1\) 行、前 \(J-1\) 列的格子填好后,最后一列由行合计决定、最后一行由列合计决定,所以能自由填的恰好是 \((I-1)(J-1)\) 格。例 15.10 是 \(4\times3\) 表,自由度 \(3\times2=6\)。这与 CFA 里"样本方差自由度 \(n-1\)"是同一个思想:每个已知的约束吃掉一个自由度。

例 15.10(霍奇金病组织学类型与治疗反应)。 Dunsmore 等(1987)的数据:

组织学类型 完全缓解 部分缓解 无反应 合计
LP 74 18 12 104
NS 68 16 12 96
MC 154 54 58 266
LD 18 10 44 72

Pearson \(\chi^2=75.89\),自由度 \(3\times2=6\),p 值约为 0;似然比统计量 68.30,p 值约为 0。有强证据表明治疗反应与组织学类型有关。从表中也能直接看出:LD 型中"无反应"的比例(44/72)远高于其他类型。

\(I\times J\) 表的检验只告诉你"不独立",不告诉你依赖的结构。要看哪些格子偏离最大,可以检查标准化残差 \((X_{ij}-E_{ij})/\sqrt{E_{ij}}\);更系统的分析是第 19 章的对数线性模型。


15.4 两个连续变量

若假设 \((Y,Z)\) 服从二元正态,依赖完全由相关系数 \(\rho\) 刻画,独立等价于 \(\rho=0\),检验、估计与置信区间都可以用第 14 章 14.3 节的 Fisher \(z\) 方法。

不假设正态时,仍可以用同样的方法推断 \(\rho\),但解读要小心:

  • 如果结论是 \(\rho\neq0\),可以推出 \(Y\) 与 \(Z\) 不独立(独立必然不相关);
  • 如果结论是 \(\rho=0\),只能说二者不相关,不能推出独立。

相关系数只度量线性依赖。金融里最典型的反例是收益的波动聚集:今天的收益与昨天的收益几乎不相关,但今天收益的绝对值与昨天收益的绝对值显著正相关——二者显然不独立。本章量化实战会演示这一点,并说明如何用列联表检验发现这种非线性依赖:把连续变量离散化(例如按分位数分组),再做 15.3 节的 \(I\times J\) 检验。

推导拆解(一个最简单的"不相关但不独立"):令 \(Y\sim N(0,1)\),\(Z=Y^2\)。\(Z\) 完全由 \(Y\) 决定,显然不独立。但 \(\text{Cov}(Y,Z)=\mathbb E(Y^3)-\mathbb EY\cdot\mathbb EY^2=0-0=0\),因为标准正态关于 0 对称,奇数阶矩为 0。相关系数只能看到"\(Y\) 大时 \(Z\) 平均也大"这种直线关系,而这里 \(Y\) 很正和很负时 \(Z\) 都大,正负抵消,直线斜率为 0。 金融版本:期权组合的 delta 中性头寸(如跨式组合)与标的收益几乎不相关,但盈亏显然依赖标的的大幅波动,这是 gamma 带来的二次关系。


15.5 一个连续变量与一个离散变量

设 \(Y\in\{1,\dots,I\}\) 离散,\(Z\) 连续。令 \(F_i(z)=\mathbb P(Z\le z\mid Y=i)\) 为 \(Y=i\) 组中 \(Z\) 的条件分布函数。

定理 15.11。 \(Y\amalg Z\) 当且仅当 \(F_1=\dots=F_I\)。

于是独立性检验就变成了"各组分布是否相同"的检验:\(H_0:F_1=\dots=F_I\)。对 \(I=2\) 的情形,可以用两样本 Kolmogorov–Smirnov 检验。记 \(n_1,n_2\) 为两组观测数,

\[\hat F_1(z)=\frac1{n_1}\sum_{i=1}^nI(Z_i\le z)I(Y_i=1),\qquad\hat F_2(z)=\frac1{n_2}\sum_{i=1}^nI(Z_i\le z)I(Y_i=2),\]
检验统计量为两条经验分布函数之间的最大垂直距离
\[D=\sup_x|\hat F_1(x)-\hat F_2(x)|.\]

定理 15.12。 令 \(H(t)=1-2\sum_{j=1}^\infty(-1)^{j-1}e^{-2j^2t^2}\)。在 \(H_0\) 下

\[\lim_{n\to\infty}\mathbb P\left(\sqrt{\frac{n_1n_2}{n_1+n_2}}\,D\le t\right)=H(t).\tag{15.14}\]
因此近似水平 \(\alpha\) 的检验为:当 \(\sqrt{\frac{n_1n_2}{n_1+n_2}}D>H^{-1}(1-\alpha)\) 时拒绝 \(H_0\)。常用值 \(H^{-1}(0.95)\approx1.358\)。

白话解释:\(\sqrt{n_1n_2/(n_1+n_2)}\) 是两样本问题的"有效样本量"的平方根。两组一样大(\(n_1=n_2=m\))时它等于 \(\sqrt{m/2}\);一组极大时它趋于小组的 \(\sqrt{n_\text{小}}\),因为大组的经验分布几乎就是真分布,精度瓶颈在小组。乘上它是为了把 \(D\) 标准化,使其在 \(H_0\) 下有一个不依赖样本量的极限分布 \(H\),就像把 \(\bar X-\mu\) 乘以 \(\sqrt n/\sigma\) 得到标准正态一样。数值例子:\(n_1=400\),\(n_2=200\),缩放因子 \(\sqrt{80000/600}\approx11.55\),5% 临界值 \(1.358/11.55\approx0.118\),与 15.7 节输出一致。

KS 检验的优点是不依赖分布形式,能检测任何类型的分布差异(均值、方差、形状)。它的已知弱点是对分布中部的差异最敏感,对尾部差异不太敏感——因为经验分布函数在尾部本来就接近 0 或 1,差距不可能很大。关心尾部时,可以改用对尾部加权的 Anderson–Darling 检验。


15.6 附录:优势比的解释与抽样设计

优势比的含义

事件 \(A\) 的优势(odds)定义为 \(\text{odds}(A)=\mathbb P(A)/(1-\mathbb P(A))\),反过来 \(\mathbb P(A)=\text{odds}(A)/(1+\text{odds}(A))\)。设 \(E\) 为"暴露"(吸烟、辐射等),\(D\) 为"患病"。暴露者的患病优势为 \(\text{odds}(D\mid E)=\frac{\mathbb P(D\mid E)}{1-\mathbb P(D\mid E)}\),非暴露者为 \(\text{odds}(D\mid E^c)\)。优势比定义为

\[\psi=\frac{\text{odds}(D\mid E)}{\text{odds}(D\mid E^c)}.\]
\(\psi=1\) 当且仅当暴露与否患病概率相同,即暴露与患病独立。

把概率表的行记为 \(E^c,E\)、列记为 \(D^c,D\),则 \(\mathbb P(D\mid E)=\frac{p_{11}}{p_{10}+p_{11}}\),\(\text{odds}(D\mid E)=\frac{p_{11}}{p_{10}}\);\(\text{odds}(D\mid E^c)=\frac{p_{01}}{p_{00}}\)。于是 \(\psi=\frac{p_{11}p_{00}}{p_{01}p_{10}}\),与定义 15.1 一致。

三种抽样设计

估计方法取决于数据是怎样收集的。原书讨论了三种设计:

  1. 多项抽样(multinomial sampling):从总体中随机抽取 \(n\) 个人,记录每个人的暴露与患病状况。此时 \(X\sim\text{Multinomial}(n,p)\),\(\hat p_{ij}=X_{ij}/n\),\(\hat\psi=\frac{X_{11}X_{00}}{X_{01}X_{10}}\)。

  2. 前瞻抽样 / 队列抽样(prospective / cohort sampling):事先选定一组暴露者和一组非暴露者(行合计 \(X_{0\cdot},X_{1\cdot}\) 固定),追踪各组中有多少人患病:\(X_{01}\sim\text{Binomial}(X_{0\cdot},\mathbb P(D\mid E^c))\),\(X_{11}\sim\text{Binomial}(X_{1\cdot},\mathbb P(D\mid E))\)。这种设计无法估计表中所有概率(例如暴露比例由研究者决定),但 \(\psi\) 只依赖于 \(\mathbb P(D\mid E)\) 与 \(\mathbb P(D\mid E^c)\),用 \(\widehat{\mathbb P}(D\mid E)=X_{11}/X_{1\cdot}\)、\(\widehat{\mathbb P}(D\mid E^c)=X_{01}/X_{0\cdot}\) 代入,得到同样的 \(\hat\psi=\frac{X_{00}X_{11}}{X_{01}X_{10}}\)。

  3. 病例对照 / 回顾性抽样(case-control / retrospective sampling):事先选定一组患者和一组非患者(列合计固定),回头查他们的暴露比例:\(X_{10}\sim\text{Binomial}(X_{\cdot0},\mathbb P(E\mid D^c))\),\(X_{11}\sim\text{Binomial}(X_{\cdot1},\mathbb P(E\mid D))\)。疾病罕见时,这种设计比前两种高效得多(随机抽 1 万人也许只有几个病人)。令人意外的是,\(\psi\) 仍然可以估计,因为优势比具有对称性:

    \[\frac{\text{odds}(E\mid D)}{\text{odds}(E\mid D^c)}=\frac{p_{11}/p_{01}}{p_{10}/p_{00}}=\frac{p_{11}p_{00}}{p_{01}p_{10}}=\psi.\]
    所以估计仍为 \(\hat\psi=\frac{X_{00}X_{11}}{X_{01}X_{10}}\)。

结论:三种设计下优势比的估计完全相同。 这是优势比在流行病学中如此流行的原因。

病例对照设计不能估计什么

在病例对照设计中,风险差 \(\mathbb P(D\mid E)-\mathbb P(D\mid E^c)\) 不可估计。由 Bayes 定理,

\[\mathbb P(D\mid E)=\frac{\mathbb P(E\mid D)\mathbb P(D)}{\mathbb P(E\mid D)\mathbb P(D)+\mathbb P(E\mid D^c)(1-\mathbb P(D))},\]
它依赖于患病率 \(\mathbb P(D)\),而患病率由研究者选多少病人决定,无法从数据中估计。

相对风险(relative risk)定义为 \(\rho=\mathbb P(D\mid E)/\mathbb P(D\mid E^c)\),它同样不能在病例对照设计下直接估计。但:

定理 15.13。 当 \(\mathbb P(D)\to0\) 时,\(\psi/\rho\to1\)。

即在罕见病假设下,相对风险约等于优势比,而后者是可以估计的。直观上,\(\mathbb P(D\mid\cdot)\) 很小时 \(1-\mathbb P(D\mid\cdot)\approx1\),优势与概率几乎相同。

金融直觉:用违约率算一遍。高杠杆公司违约率 4%,低杠杆 1%。相对风险 \(=4\);优势比 \(=\frac{0.04/0.96}{0.01/0.99}\approx4.13\),两者接近。若是"年度跑输基准"这种常见事件,概率 60% 对 40%,相对风险 1.5,优势比 \(\frac{0.6/0.4}{0.4/0.6}=2.25\),差别就很大。所以把优势比当"倍数"讲给投委会听时,先确认事件是否罕见。

量化含义:按结果抽样。 病例对照设计在量化中有一个直接对应:只研究发生了某种结果的样本。例如只收集"暴跌过的股票"或"违约过的公司",再与对照组比较其事前特征。这样做能估计特征与结果之间的优势比(相对强度),但不能估计绝对概率——"具有某特征的股票暴跌的概率是多少"不可估计,因为暴跌样本占比是你自己决定的。把这类研究中的比例直接当作概率使用,会严重高估事件发生率。信用评分模型在"违约样本过采样"后必须校准截距,原因相同。


15.7 量化实战

下面的脚本演示四个问题:用 \(2\times2\) 表检验交易信号;序列相关如何让 \(\chi^2\) 检验失真;"不相关但不独立"的 GARCH 型收益;以及用两样本 KS 检验比较两个市场状态下的收益分布。

import numpy as np
from scipy import stats

rng = np.random.default_rng(15)

def indep_tests(X):
    """似然比 T 与 Pearson U,自由度 (I-1)(J-1)"""
    X = np.asarray(X, float); n = X.sum()
    E = np.outer(X.sum(1), X.sum(0)) / n
    with np.errstate(divide="ignore", invalid="ignore"):
        T = 2 * np.nansum(X * np.log(X / E))
    U = np.sum((X - E) ** 2 / E); df = (X.shape[0] - 1) * (X.shape[1] - 1)
    return T, U, df, stats.chi2.sf(T, df), stats.chi2.sf(U, df)

def log_odds(X):
    X = np.asarray(X, float) + 0.0
    g = np.log(X[0, 0] * X[1, 1] / (X[0, 1] * X[1, 0])); se = np.sqrt((1 / X).sum())
    return g, se

# ---------- 1) 信号方向 × 次日涨跌 的 2×2 表 ----------
n = 1000
signal = rng.integers(0, 2, n)                              # 1=看多, 0=看空
p_up = np.where(signal == 1, 0.54, 0.48)                    # 信号有一点点作用
up = rng.binomial(1, p_up)
tab = np.array([[np.sum((signal == 0) & (up == 0)), np.sum((signal == 0) & (up == 1))],
                [np.sum((signal == 1) & (up == 0)), np.sum((signal == 1) & (up == 1))]])
T, U, df, pT, pU = indep_tests(tab)
g, se = log_odds(tab)
print("2×2 表 [[空&跌, 空&涨],[多&跌, 多&涨]] =", tab.tolist())
print(f"似然比 T={T:.2f} (p={pT:.4f}), Pearson U={U:.2f} (p={pU:.4f})")
print(f"优势比 {np.exp(g):.3f}, 95%CI ({np.exp(g-1.96*se):.3f}, {np.exp(g+1.96*se):.3f}); Wald={g/se:.2f}")
chi2_sp = stats.chi2_contingency(tab, correction=False)[0]
print(f"scipy chi2_contingency(无连续性校正) = {chi2_sp:.2f}")

# ---------- 2) 序列相关让 χ² 检验失真:重叠 5 日标签,信号与收益本来无关 ----------
def false_reject(overlap, reps=2000, n=500, H=5):
    rej = 0
    for _ in range(reps):
        s = np.repeat(rng.integers(0, 2, n // 20 + 1), 20)[:n]   # 信号每 20 天才变一次(慢信号)
        r = rng.normal(size=n + H)
        fwd = np.array([r[t + 1:t + 1 + H].sum() for t in range(n)]) if overlap else r[1:n + 1]
        y = (fwd > 0).astype(int)
        tb = np.array([[np.sum((s == a) & (y == b)) for b in (0, 1)] for a in (0, 1)])
        rej += indep_tests(tb)[4] < 0.05
    return rej / reps
print(f"名义 5% 检验的实际误拒率:次日标签 {false_reject(False):.3f};重叠 5 日标签 {false_reject(True):.3f}")

# ---------- 3) 不相关 ≠ 独立:GARCH 型收益 ----------
T_len = 3000; r = np.zeros(T_len); h = np.full(T_len, 1e-4)
for t in range(1, T_len):
    h[t] = 1e-6 + 0.10 * r[t - 1] ** 2 + 0.88 * h[t - 1]
    r[t] = np.sqrt(h[t]) * rng.standard_normal()
x, y = r[:-1], r[1:]
rho = np.corrcoef(x, y)[0, 1]; th = np.arctanh(rho); hw = 1.96 / np.sqrt(len(x) - 3)
print(f"r_t 与 r_(t-1) 的相关 {rho:.3f}, 95%CI ({np.tanh(th-hw):.3f}, {np.tanh(th+hw):.3f})")
qx = np.digitize(np.abs(x), np.quantile(np.abs(x), [1/3, 2/3]))  # |r| 三分位:小/中/大
qy = np.digitize(np.abs(y), np.quantile(np.abs(y), [1/3, 2/3]))
tab3 = np.array([[np.sum((qx == i) & (qy == j)) for j in range(3)] for i in range(3)])
T3, U3, df3, pT3, pU3 = indep_tests(tab3)
print("|r| 三分位 3×3 表:", tab3.tolist())
print(f"独立性检验: T={T3:.1f}, U={U3:.1f}, df={df3}, p={pU3:.2e}")

# ---------- 4) 一个离散 + 一个连续:两样本 KS 检验 ----------
calm = rng.normal(0, 0.010, 400)                                  # 平静期日收益
n1 = len(calm)
for name, stress in [("高波动期(正态,σ=1.5%)", rng.normal(0, 0.015, 200)),
                     ("同方差但厚尾(σ=1%,t3)", rng.standard_t(3, 200) * 0.010 / np.sqrt(3))]:
    D, pks = stats.ks_2samp(calm, stress)
    n2 = len(stress)
    crit = stats.kstwobign.ppf(0.95) / np.sqrt(n1 * n2 / (n1 + n2))      # H^{-1}(0.95)/sqrt(n1 n2/(n1+n2))
    pt = stats.ttest_ind(calm, stress, equal_var=False).pvalue
    print(f"{name}: KS D={D:.3f} (5%临界值 {crit:.3f}, p={pks:.4f}); 只比均值的 Welch t 检验 p={pt:.3f}")

关键输出:

2×2 表 [[空&跌, 空&涨],[多&跌, 多&涨]] = [[246, 240], [248, 266]]
似然比 T=0.56 (p=0.4540), Pearson U=0.56 (p=0.4541)
优势比 1.099, 95%CI (0.858, 1.409); Wald=0.75
scipy chi2_contingency(无连续性校正) = 0.56
名义 5% 检验的实际误拒率:次日标签 0.050;重叠 5 日标签 0.296
r_t 与 r_(t-1) 的相关 0.004, 95%CI (-0.032, 0.040)
|r| 三分位 3×3 表: [[329, 372, 299], [372, 319, 308], [299, 308, 393]]
独立性检验: T=30.7, U=31.2, df=4, p=2.72e-06
高波动期(正态,σ=1.5%): KS D=0.188 (5%临界值 0.118, p=0.0002); 只比均值的 Welch t 检验 p=0.917
同方差但厚尾(σ=1%,t3): KS D=0.140 (5%临界值 0.118, p=0.0103); 只比均值的 Welch t 检验 p=0.372

读法。

  1. 弱信号需要大样本。 模拟中信号确实有效:看多时上涨概率 54%,看空时 48%,真实优势比为 \((0.54/0.46)/(0.48/0.52)\approx1.27\)。但 1000 个交易日的样本给出 \(\hat\psi=1.10\),95% 区间 \((0.86,1.41)\),检验不显著。粗略估算:每格约 \(n/4\) 个观测时 \(\text{se}(\hat\gamma)\approx4/\sqrt n\),要以 80% 的把握在 5% 水平上检出 \(\gamma=\log1.27\approx0.24\),需要 \(4/\sqrt n\le0.24/2.8\),即 \(n\approx2200\) 个独立观测,约 9 年日频数据。命中率提升几个百分点的信号,单用一个标的的历史很难被统计确认;横截面上多只股票同时使用信号,才能积累足够样本(但要注意横截面相关)。scipy 的 chi2_contingency(关闭连续性校正)与手写的 \(U\) 一致。
  2. 序列相关让检验失真。 信号与收益完全无关。用次日涨跌作标签时,名义 5% 检验的实际误拒率恰为 5.0%;改用重叠的 5 日累计收益作标签、信号又变化缓慢时,误拒率升至 29.6%。\(\chi^2\) 检验假设 \(n\) 个观测相互独立,而重叠标签加慢信号使有效样本量远小于 \(n\)。这与第 13b 章交叉验证泄漏是同一个问题的两个侧面。对策是用不重叠的样本、按块重抽样(block bootstrap)或调整有效样本量。
  3. 不相关不等于独立。 GARCH 型收益的一阶自相关为 0.004,置信区间 \((-0.032,0.040)\) 包含零——按 15.4 节的规则,只能说"不相关"。把 \(|r_t|\) 与 \(|r_{t-1}|\) 各按三分位分组后,\(3\times3\) 表的独立性检验 p 值为 \(2.7\times10^{-6}\),强烈拒绝独立:"昨天大波动、今天也大波动"的格子有 393 个,明显多于独立时的期望频数约 333;"昨天小、今天大"和"昨天大、今天小"的格子都只有 299 个,明显偏少。这就是波动聚集,也是第 06 册 GARCH 模型的出发点。
  4. KS 检验能看到 \(t\) 检验看不到的差异。 两种压力情形下均值都相同,Welch \(t\) 检验无法区分。KS 检验在"波动放大"情形下 \(D=0.188\),远超临界值 0.118;在"方差相同但厚尾"情形下 \(D=0.140\) 也超过临界值——但它检测到的主要是厚尾分布中部更尖(同样的方差下,\(t_3\) 的大部分观测更集中在 0 附近),而不是尾部本身。这与 15.5 节"KS 对中部敏感"的说法一致。在量化中,KS 检验常用于检查样本内与样本外的收益、因子值或交易成本分布是否发生了漂移。

本章小结

检验两个变量是否独立的通用方法是比较"独立"与"不受约束"两种模型的拟合。两个离散变量时用列联表上的似然比统计量 \(T\) 或 Pearson 统计量 \(U\),二者渐近服从自由度 \((I-1)(J-1)\) 的 \(\chi^2\) 分布。\(2\times2\) 表的依赖强度用优势比 \(\psi\) 度量,独立等价于 \(\psi=1\);对数优势比的标准误是四格倒数和的平方根,置信区间应在对数尺度上构造。两个连续变量可以用相关系数,但不相关不等于独立。一个离散一个连续变量时,独立等价于各组条件分布相同,可用两样本 KS 检验。优势比在多项、队列、病例对照三种抽样设计下都能同样估计,而绝对风险在按结果抽样的设计中不可估计。所有这些检验都假设观测独立,金融时间序列中的重叠标签和序列相关会使它们严重失真。

概念 公式 / 结论
优势比 \(\psi=\dfrac{p_{00}p_{11}}{p_{01}p_{10}}\);\(Y\amalg Z\iff\psi=1\iff\gamma=\log\psi=0\)
期望频数 \(E_{ij}=X_{i\cdot}X_{\cdot j}/n\)
似然比统计量 \(T=2\sum X_{ij}\log\dfrac{X_{ij}X_{\cdot\cdot}}{X_{i\cdot}X_{\cdot j}}\)
Pearson 统计量 \(U=\sum(X_{ij}-E_{ij})^2/E_{ij}\)
自由度 \(2\times2\):1;\(I\times J\):\((I-1)(J-1)\)
对数优势比标准误 \(\sqrt{1/X_{00}+1/X_{01}+1/X_{10}+1/X_{11}}\)
\(\psi\) 的区间 \(\exp\big(\hat\gamma\pm z_{\alpha/2}\widehat{\text{se}}(\hat\gamma)\big)\)
小样本修正 每格加 \(\frac12\)
两样本 KS \(D=\sup\lvert\hat F_1-\hat F_2\rvert\),\(\sqrt{n_1n_2/(n_1+n_2)}D\rightsquigarrow H\),\(H^{-1}(0.95)\approx1.358\)
罕见事件 \(\mathbb P(D)\to0\) 时优势比 \(\approx\) 相对风险

练习

基础

  1. 证明定理 15.2:\(2\times2\) 表中 \(\psi=1\) 当且仅当 \(p_{ij}=p_{i\cdot}p_{\cdot j}\) 对所有 \(i,j\) 成立。(原书习题 1。)
  2. 推导 \(2\times2\) 表独立假设下的受约束最大似然估计 \(\hat p_{ij}=\hat p_{i\cdot}\hat p_{\cdot j}\),并由此写出似然比统计量 (15.4)。(原书习题 2。)
  3. 用 Delta 方法证明 (15.7)。(原书习题 3,提示见 15.2 节。)
  4. 马里兰州死刑判决数据(原书习题 4):受害者为黑人的案件中判死刑 14 例、未判 641 例;受害者为白人的案件中判死刑 62 例、未判 594 例。计算 \(T\)、\(U\)、优势比及其 95% 置信区间,并解释为什么不能据此得出因果结论。(答案:\(T\approx34.5\),\(U\approx32.1\);以"黑人受害者"为暴露、"判死刑"为结果,\(\hat\psi\approx0.21\),\(\hat\gamma\approx-1.56\),\(\text{se}\approx0.30\),95% 区间约 \((0.12,0.38)\)。案件的其他特征——如犯罪情节、所在辖区——可能同时关联受害者种族与判决结果。)
  5. 一个信号在 400 次交易中:看多 200 次,其中次日上涨 116 次;看空 200 次,其中次日上涨 96 次。求优势比、95% 区间与 Pearson 检验的 p 值。

进阶

  1. 证明在 \(H_0\) 附近 \(T\approx U\)。(提示:令 \(X_{ij}=E_{ij}(1+\delta_{ij})\),对 \(x\log x\) 二阶展开,并利用 \(\sum_{ij}(X_{ij}-E_{ij})=0\)。)
  2. 证明定理 15.13:\(\mathbb P(D)\to0\) 时优势比与相对风险之比趋于 1。
  3. 修改 15.7 节第 2 部分:把标签窗口 \(H\) 分别设为 1、5、20,信号变化周期分别设为 1、20 天,制作误拒率表格,并用"有效样本量"的概念解释结果。
  4. 两样本 KS 检验对尾部不敏感。修改 15.7 节第 4 部分,只比较两组收益中超过各自 95% 分位数的部分,或改用 scipy.stats.anderson_ksamp,比较检测厚尾差异的能力。
  5. 一位研究员收集了过去 10 年所有单日跌幅超过 9% 的股票共 300 只,以及随机抽取的 300 只对照股票,发现前者中"高质押比例"的占比为 40%,对照组中为 15%。能估计什么?不能估计什么?(提示:优势比约 \(\frac{0.40/0.60}{0.15/0.85}\approx3.8\) 可以估计;"高质押股票暴跌的概率"不能估计。)

原书推荐习题:第 15 章 3(Delta 方法推导对数优势比标准误)、4(死刑数据的完整分析与因果谨慎,必做)、7(钙摄入与血压下降:两样本 KS 检验应用)、5(Montana 数据:两个离散变量)。


原书对照

本章内容 原书章节 PDF 页码
两个二元变量:优势比、\(T\) 与 \(U\) 检验、例 15.5、例 15.8 15.1 p.247–251
两个离散变量、例 15.10 15.2 p.251–252
两个连续变量 15.3 p.252
一个连续一个离散:两样本 KS 检验 15.4 p.252–253
附录:优势比的解释、三种抽样设计、相对风险 15.5 p.253–256
习题 15.6 p.256–257