第 2 章

因子投资方法论

第 1 章立起了核心公式 $\E[R_i^e] = \alpha_i + \boldsymbol{\beta}_i^{\top}\boldsymbol{\lambda}$,本章回答"怎么算、怎么验":怎么把抽象的因子变成一个可交易的组合并算出 $\boldsymbol{\lambda}$,怎么估计 $\boldsymbol{\beta}$,怎么用统计检验判断 $\alpha$ 是运气还是真本事。排序法、Fama–MacBeth 回归、Newey–West 标准误、GRS 检验、GMM——这些名字几乎出现在每一篇实证资产定价论文里。读完本章,你手里就有了读懂并复现这些论文的整套统计武器。

2.1投资组合排序法

先回到一个第 1 章遗留的问题。因子的定义是"驱动众多资产共同运动的系统性风险来源",这个定义很抽象:估值水平是因子、GDP 也可以是因子,但"价值因子这个月赚了多少"到底怎么算?答案是给抽象的因子找一个实体载体——一个专门为它构建的投资组合,用组合的收益率代表因子的收益率。

因子模拟投资组合 factor mimicking portfolio

为某个因子量身定做的组合:它的涨跌只跟这个因子有关,跟别的因子和个股噪声都尽量无关,于是它每期的收益率就可以当作"这个因子本期的收益率"。

严格地说,因子模拟组合要满足两个条件:条件一,只在目标因子上有大于零的暴露,在其他所有因子上的暴露为零;条件二,在满足条件一的所有组合中,它的特质性风险(idiosyncratic risk)最小。

条件一保证"纯":如果组合还暴露于别的因子,它的收益率就是几个因子收益的混合,无法归因。条件二保证"准":组合收益率中除了因子还有个股自身的随机扰动 $\varepsilon$,扰动占比越高,用它衡量因子收益的误差就越大,所以要在合格的组合里挑噪声最小的那个。

例子

一个假想市场里有因子 A、B 和四只股票(数字为编造的示意):

对因子 A 的暴露对因子 B 的暴露特质性风险
股票一+1.0+1.020%
股票二+1.0+1.025%
股票三+1.0−1.040%
股票四+1.0−1.020%

想构建因子 A 的模拟组合。等权买入股票一、二是错的:它们对 B 的暴露也是 +1,组合收益混入了因子 B。等权买入股票一、三或者股票一、四都能让 B 的暴露对消(+1 与 −1 相抵),满足条件一;再按条件二挑特质风险更小的搭配——股票四的特质风险低于股票三——最终答案是等权配置股票一和股票四。

排序法:绕开"先有鸡还是先有蛋"

上面的构建有一个前提:已知每只股票在每个因子上的暴露。但暴露 $\beta$ 通常要靠"股票收益对因子收益回归"来估计——也就是说,算 $\beta$ 需要先有因子收益率,而算因子收益率又需要先有 $\beta$。这就是一个"先有鸡还是先有蛋"的死结。投资组合排序法(portfolio sort)的价值就在于用一个巧妙的近似绕开它。

投资组合排序法 portfolio sort

不去算精确的暴露,而是相信"某个指标高的股票,对相应因子的暴露也高":按指标把股票排序分组,买入最高的一组、卖空最低的一组,用这个多空组合的收益代表因子收益。

把用来排序的指标称为排序变量(sort variable)。核心思想只有一句话:用排序变量取值的高低代替因子暴露的高低。注意它没有假设"变量取值 = 因子暴露",也没有假设二者满足任何函数关系,只假设二者单调相关。以账面市值比(book-to-market ratio,BM,市净率的倒数)为例:只需相信高 BM 股票对价值因子的暴露更高即可。

这也解释了排序法的适用边界:它只适用于风格因子(style factor)——由财务或量价数据构建、每只股票都有对应指标的因子(估值、市值、盈利、低波动……)。像 GDP 这样的宏观经济因子,个股层面找不到对应的排序变量,就得改用 2.2 节的回归方法。

排序法的操作分三步(以 BM 构建价值因子为例):

  1. 排序:确定股票池,把所有股票按 BM 在截面上从高到低排序。若变量与收益负相关(如波动率),则按惯例从低到高排。
  2. 分组:按分位数分成 $L$ 组(惯例 $L=10$,即十分位)。做多排名最高的一组、做空最低的一组,且多空两头金额相等(资金中性),得到价差组合(spread portfolio)。组内个股常用市值加权或等权。这个价差组合就是排序法版本的因子模拟组合,它的收益率就是因子收益率。
  3. 定期更新:股票的 BM 会变,需按月或按年再平衡(rebalance),重复前两步;两次再平衡之间记录组合收益,时间上串起来就得到因子收益率序列 $\{\lambda_t\}$。

排序检验(一):因子预期收益率的 t 检验

有了 $\{\lambda_t\}$,第一件事是检验"这个因子长期到底赚不赚钱"。原假设 $H_0$ 是因子预期收益为零——即这个因子不被定价,多空收益只是噪声。检验用的是最基础的单样本 t 检验:

式 (2.1)–(2.2) · 因子预期收益率的估计与标准误
$$ \hat{\lambda} = \frac{1}{T}\sum_{t=1}^{T} \lambda_t, \qquad \mathrm{s.e.}(\hat{\lambda}) = \frac{\mathrm{std}(\lambda_t)}{\sqrt{T}} $$
$\lambda_t$价差组合在第 $t$ 期实现的收益率,共 $T$ 期
$\hat{\lambda}$因子预期收益率的估计:时序均值
$\mathrm{std}(\lambda_t)$$\{\lambda_t\}$ 的样本标准差
$\mathrm{s.e.}(\hat{\lambda})$样本均值的标准误——"如果重抽一遍历史,$\hat{\lambda}$ 会晃动多少"
均值是信号,标准误是"信号的抖动"。样本每翻四倍,标准误才减半——这就是为什么金融里证明一个因子有效需要几十年数据。
式 (2.3) · 因子收益率的 t 统计量
$$ t = \frac{\hat{\lambda}}{\mathrm{s.e.}(\hat{\lambda})} = \frac{\hat{\lambda}}{\mathrm{std}(\lambda_t)\,/\,\sqrt{T}} $$
$t$在 $H_0:\lambda=0$ 下服从自由度 $T-1$ 的 t 分布;大样本下 $|t|>2.0$ 对应约 0.05 的显著性水平,$|t|>2.6$ 对应约 0.01
t 值回答的问题是:观测到的平均收益,是"信号大小"的多少倍于"纯靠运气也能晃出的幅度"。学术惯例以 $|t|>2$ 为显著门槛(第 6 章会讲到,考虑多重检验后这个门槛已被提高到 3.0 以上)。

原书用 2000—2019 年 A 股数据对 BM 做了十分位排序(市值加权、每月再平衡):价值因子月均收益约 0.9%,t 值约 1.85——只能在 0.1 的显著性水平下拒绝原假设,按 0.05 的标准则不算显著。这个例子顺带演示了一个事实:一个方向正确、量级可观的因子,完全可能因为波动太大而"差一口气"过不了显著性检验。

排序检验(二):单调性

好因子除了多空收益显著,还应满足:$L$ 个分组的平均收益随分组序号单调变化——如果只有最高、最低两组表现极端而中间乱序,多空收益很可能是尾部几只股票的巧合。单调性用秩相关系数(rank correlation coefficient)度量,最常用 Spearman 秩相关系数:

式 (2.4) · Spearman 秩相关系数
$$ \rho_s = \frac{\Cov(X_r, X_g)}{\sigma_{X_r}\,\sigma_{X_g}} \;=\; 1 - \frac{6\sum_{i=1}^{L} d_i^2}{L(L^2-1)} $$
$X_r$$L$ 个组合按平均收益率高低的排位(1 到 $L$)
$X_g$$L$ 个组合按排序变量分组的排位
$d_i$第 $i$ 个组合两种排位之差;第二个等号在无并列排位时成立
$\rho_s$取值 $[-1,1]$:收益随分组完美递增时为 $1$,完美递减时为 $-1$
普通相关系数量"直线关系",秩相关只量"顺序关系"——它不在乎收益差多少,只在乎"名次是否对得上",正好匹配排序法"只信单调、不信数值"的精神。

下图用模拟数据演示排序检验在看什么。拖动滑杆改变"因子真实强度 $\lambda$"(数据生成时埋入的每月真实溢价),观察两件事:十个分位组合平均收益的单调梯子是否成形,以及多空价差组合的收益与 t 值如何变化。$\lambda$ 很小时,即使因子真实存在,20 年的样本也未必能让 t 过 2——统计检验的功效是有限的。

图 2-1 | 模拟数据:按某变量排序的十分位组合月均收益(240 个月,Low = 变量取值最低组)。当前多空组合:。(示意图,非真实行情)

多重排序:控制第二个变量

单变量排序有一个天然缺陷:它控制不了其他因子。假想高 BM 股票恰好都是大市值股,那么按 BM 构建的价差组合无形中也做多了大市值、做空了小市值——它的收益是价值和规模两个因子的混合。补救办法是同时用两个(或三个)变量排序,统称多重排序法,其中最重要的是双重排序

独立双重排序 independent / unconditional double sorting

两个变量各排各的、互不干涉,然后取交集分格子:像在地图上分别画经线和纬线,格子由两组线共同切出来。

按变量 $X_1$ 分 $L_1$ 组、按 $X_2$ 独立分 $L_2$ 组(各用自己的全市场分位数作为分界),两两取交集得 $L_1\times L_2$ 个组合 $P_{ij}$(下标 $i$ 为 $X_1$ 分组、$j$ 为 $X_2$ 分组)。两个变量地位完全对称,可以同时为两个变量各构建一个因子。

式 (2.5) · 独立双重排序下 $X_1$ 因子的收益率
$$ \lambda_{X_1,t} \;=\; \frac{1}{L_2}\sum_{j=1}^{L_2} R_{L_1 j,t} \;-\; \frac{1}{L_2}\sum_{j=1}^{L_2} R_{1j,t} $$
$R_{ij,t}$组合 $P_{ij}$($X_1$ 第 $i$ 组 ∩ $X_2$ 第 $j$ 组)第 $t$ 期收益率
$\frac{1}{L_2}\sum_j R_{L_1 j,t}$多头:$X_1$ 排名最高的 $L_2$ 个格子等权平均——每档 $X_2$ 里都取一个"高 $X_1$"组合
$\frac{1}{L_2}\sum_j R_{1j,t}$空头:$X_1$ 排名最低的 $L_2$ 个格子等权平均
在 $X_2$ 的每一档内部都做一次"高 $X_1$ 减低 $X_1$",再对各档平均:$X_2$ 的水平在多空两头是对称出现的,于是它的影响被抵消——这就是"控制变量"在排序世界里的实现方式。把 $X_1$、$X_2$ 角色互换即得 $\lambda_{X_2,t}$(式 2.6)。

把求和重排一下,可以得到完全等价的"先做差、再平均"形式:

式 (2.7) · 等价形式:逐档价差的平均
$$ \lambda_{X_1,t} \;=\; \frac{1}{L_2}\sum_{j=1}^{L_2} \left( R_{L_1 j,t} - R_{1j,t} \right) $$
$R_{L_1 j,t} - R_{1j,t}$在 $X_2$ 第 $j$ 档内部,"高 $X_1$ 组减低 $X_1$ 组"的价差收益
数值上与式 (2.5) 一模一样,但视角不同:它把总收益拆成 $L_2$ 个"档内价差"。研究异象时人们正想知道"在控制变量的每一档里,异象变量是否都能区分收益",看的就是每一项 $R_{L_1 j,t}-R_{1j,t}$ 是否显著、方向是否一致。
误区

独立排序的格子可能"贫富不均"。若 $X_1$、$X_2$ 截面相关性很高,股票会挤在对角线格子里,"高 $X_1$ 低 $X_2$"这类反对角格子可能只剩几只股票甚至为空,因子收益被少数异常值绑架。实操自查方法很朴素:数一数每个格子的股票数,格格充足才放心。这也是为什么人们通常不拿高度相关的两个变量做独立双重排序。

条件双重排序 conditional / dependent double sorting

先按第一个变量分组,再在每个组内部按第二个变量细分:第二个变量的"高低"是相对同组邻居而言的,不是相对全市场。

先按 $X_1$ 分 $L_1$ 组;在每组内部再按 $X_2$(用组内分位数)分 $L_2$ 组。由于分界线是组内算的,每个格子的股票数天然均衡,不会出现空格子。代价是两个变量地位不对称:$X_1$ 只是控制变量,检验的是"控制 $X_1$ 之后 $X_2$ 还有没有增量信息",因此只应围绕第二排序变量 $X_2$ 构建因子;给第一排序变量构建因子的含义是模糊的(Bali 等人对此有专门讨论)。

条件排序下计算 $X_2$ 因子收益率有两种做法。第一种沿用式 (2.6)/(2.8):各格子先算收益、多空各 $L_1$ 个格子等权平均再相减。第二种是"并集法"——先把股票挑出来合并成两个大组合,再整体加权:

式 (2.10)–(2.11) · 并集法:先合并股票、再算多空
$$ \mathcal{H} = \bigcup_{i=1}^{L_1} P_{iL_2}, \quad \mathcal{L} = \bigcup_{i=1}^{L_1} P_{i1}, \qquad \lambda_{X_2,t} = R_{\mathcal{H},t} - R_{\mathcal{L},t} $$
$\mathcal{H}$每个 $X_1$ 组里 $X_2$ 排名最高的格子取并集——所有"组内高 $X_2$"股票的大集合
$\mathcal{L}$对应的"组内低 $X_2$"股票大集合
$R_{\mathcal{H},t},\,R_{\mathcal{L},t}$把 $\mathcal{H}$、$\mathcal{L}$ 内全部股票按统一方式(市值加权或等权)配置后的组合收益率
与式 (2.6) 的差别只在加权层级:式 (2.6) 先在格子内加权、格子之间等权;并集法把股票拉平后统一加权。两个组合等权配置时二者完全等价;市值加权时才略有差异。文献中两种都有人用(如 Bali 等用前者、Liu 等中国三因子论文用后者)。
旁注

分组数的惯例。研究异象时常用 5×5 或 10×10;研究因子时最常见的是市值 + 另一变量的 2×3 独立双重排序——市值分大小两组、另一变量按 30%/40%/30% 分高中低三组,交集出 6 个组合。这套做法源自 Fama and French(1993)构建 SMB 与 HML 因子,作为多因子模型的开山之作,它的每个细节都被后人沿用成了行规(第 4 章详述)。近年也有三重排序(triple sorting):如 Hou 等人的 q 因子模型用市值、投资、盈利三个维度排序,动机是盈利和投资效应在小盘股中更强,需要同时控制市值。

因子命名约定

同一个因子在文献里常有三种名字,以 BM 为例:按构建方式叫 HML(High-Minus-Low,做多高 BM、做空低 BM),按变量叫 BM 因子,按风格叫价值因子。FF 式命名的好处是名字自带方向信息——HML、RMW(Robust-Minus-Weak,盈利因子)表示变量与收益正相关,SMB(Small-Minus-Big,规模因子)表示负相关;坏处是因子一多就不够用、也不直观。本手册与原书一致,采用风格命名:用 BM 构建的叫价值因子、用 ROE 构建的叫盈利因子。理由有二:绝大多数研究对象是风格因子,风格名传达的信息最清楚;业界常用多个指标合成同一风格(如 BM 与盈利市值比 EP 合成价值),用单一变量命名会以偏概全。

要点
  • 因子模拟组合 = 只暴露于目标因子(纯)+ 特质风险最小(准);它的收益率就是因子收益率。
  • 排序法用"变量高低"代替"暴露高低",绕开了"先有 β 还是先有 λ"的死结,但只适用于风格因子。
  • 检验两件事:多空收益的 t 检验($t=\hat{\lambda}\sqrt{T}/\mathrm{std}$)与分组收益的单调性(Spearman 秩相关)。
  • 单变量排序控制不了其他因子;双重排序中,独立排序对称但格子可能失衡,条件排序均衡但只能检验第二变量。
  • 研究因子的行规是市值 + 变量的 2×3 独立排序(FF 1993 遗产);本书按风格给因子命名。

2.2多因子模型的回归检验

排序法解决了"造因子"的问题,本节解决"验模型"的问题——这是全章的核心。回顾第 1 章式 (1.3),多因子模型断言资产的预期超额收益完全由暴露决定:

式 (2.12) · 待检验的截面关系
$$ \E[R_i^e] \;=\; \boldsymbol{\beta}_i^{\top} \boldsymbol{\lambda}, \qquad i = 1, \dots, N $$
$R_i^e$资产 $i$ 的超额收益;资产可以是个股,也可以是一篮子股票构成的组合
$\boldsymbol{\beta}_i$$K$ 维因子暴露向量
$\boldsymbol{\lambda}$$K$ 维因子预期收益率(溢价)向量,对所有资产相同
这是一个关于均值的截面命题:它不关心收益率随时间怎么波动,只关心"暴露高的资产长期是不是真的赚得多"。检验模型 = 检验现实数据里 $\E[R_i^e]$ 与 $\boldsymbol{\beta}_i$ 的关系是否真是这条过原点的"直线",以及偏离直线的 $\alpha_i$ 是否联合为零。

无论用哪种回归方法,检验都是同样的三步:(1)估计每个资产的暴露 $\boldsymbol{\beta}_i$;(2)估计截面关系(得到 $\boldsymbol{\lambda}$ 和 $\alpha_i$);(3)检验——联合检验 $N$ 个 $\alpha_i$ 是否为零,以及逐个检验因子溢价 $\lambda_k$ 是否显著。三种方法(时序回归、截面回归、Fama–MacBeth 回归)的区别只在第(2)步怎么做。

时序回归:Black–Jensen–Scholes

当因子收益率序列已知时——风格因子用排序法就能算出 $\boldsymbol{\lambda}_t$——最直接的办法是把它当作解释变量,对每个资产做一次时序回归。这套做法由 Black、Jensen 和 Scholes 在 1972 年检验 CAPM 时首创:

式 (2.13) · 时序回归(对每个资产 $i$ 单独做一次)
$$ R_{i,t}^e \;=\; \alpha_i + \boldsymbol{\beta}_i^{\top} \boldsymbol{\lambda}_t + \varepsilon_{i,t}, \qquad t = 1, \dots, T $$
$\boldsymbol{\lambda}_t$第 $t$ 期 $K$ 个因子实现的收益率——已知数据,作解释变量
$\boldsymbol{\beta}_i$回归系数:待估的因子暴露
$\alpha_i$回归截距:正因为解释变量是因子收益率,截距才恰好是定价误差
$\varepsilon_{i,t}$残差:资产 $i$ 的特质性波动
对每个资产独立回归 $N$ 次,一次回归同时给出 $\hat{\beta}_i$ 和 $\hat{\alpha}_i$。对式 (2.13) 两边取时间平均得 $\bar{R}_i^e = \hat{\alpha}_i + \hat{\boldsymbol{\beta}}_i^{\top}\bar{\boldsymbol{\lambda}}$(式 2.14)——截面关系是"平均"出来的,不是拟合出来的。因子溢价的估计就是因子收益率的时序均值 $\hat{\lambda}_k = \frac{1}{T}\sum_t \lambda_{k,t}$(式 2.15)。

时序回归隐含的截面直线有一个漂亮的几何特征。以单因子为例:$\beta=0$ 的资产预期收益为 0;把因子组合自己放到截面上,它对自身的暴露是 1、平均收益是 $\bar{\lambda}$。所以这条直线必然穿过 $(0,0)$ 和 $(1,\bar{\lambda})$ 两点——它由这两个点钉死,完全不理会其他资产落在哪里,所有资产的 $\hat{\alpha}_i$ 只是各自到这条线的竖直距离。这是它与截面回归最本质的区别:截面回归的直线是靠最小化所有资产 $\alpha$ 的平方和拟合出来的。

估计完了要检验"$N$ 个 $\alpha_i$ 联合是否为零"。若 $\varepsilon_{i,t}$ 无自相关、无异方差且服从 IID 正态,Gibbons、Ross 和 Shanken(1989)给出了精确的有限样本检验,即大名鼎鼎的 GRS 检验

式 (2.16) · GRS 检验统计量
$$ \mathrm{GRS} \;=\; \frac{T-N-K}{N} \cdot \frac{\hat{\boldsymbol{\alpha}}^{\top} \hat{\boldsymbol{\Sigma}}^{-1} \hat{\boldsymbol{\alpha}}}{1 + \bar{\boldsymbol{\lambda}}^{\top} \hat{\boldsymbol{\Sigma}}_{\lambda}^{-1} \bar{\boldsymbol{\lambda}}} \;\sim\; F_{N,\;T-N-K} $$
$T,\,N,\,K$期数、资产数、因子数;检验要求 $T$ 大于 $N+K$
$\hat{\boldsymbol{\alpha}}$$N$ 维向量:$N$ 次时序回归的截距 $[\hat{\alpha}_1,\dots,\hat{\alpha}_N]^{\top}$
$\hat{\boldsymbol{\Sigma}}$残差协方差矩阵的估计 $\frac{1}{T}\sum_t \hat{\boldsymbol{\varepsilon}}_t \hat{\boldsymbol{\varepsilon}}_t^{\top}$($N\times N$)
$\bar{\boldsymbol{\lambda}},\,\hat{\boldsymbol{\Sigma}}_{\lambda}$因子收益率的样本均值向量与样本协方差矩阵($K\times K$)
$F_{N,\,T-N-K}$原假设 $\boldsymbol{\alpha}=\boldsymbol{0}$ 下的精确分布:自由度为 $N$ 和 $T-N-K$ 的 F 分布
分子 $\hat{\boldsymbol{\alpha}}^{\top}\hat{\boldsymbol{\Sigma}}^{-1}\hat{\boldsymbol{\alpha}}$ 是"用残差协方差归一化后的 α 总量"——α 大但残差也大,可能是噪声;α 不大但残差极小,反而铁证如山。分母则惩罚因子本身的波动。2.5.1 节会给出它更漂亮的夏普比率解读。

GRS 是有限样本下的精确检验(不是大样本近似),且检验效力高,这是它统治学术界三十多年的原因;代价是依赖正态假设,且要求 $T$ 大于 $N+K$。当残差存在相关性或异方差时,可改用 GMM(2.7 节)。至于每个因子的溢价 $\lambda_k$,因子收益率序列已知,直接按 2.1.2 节做 t 检验即可。

两步截面回归

时序回归的前提"因子收益率已知"对宏观经济因子(GDP、CPI、利率)不成立——没法做多 GDP。截面回归(cross-sectional regression)不需要这个前提,它分两步走,故又称两步回归估计(two-pass regression estimate)。

第一步(时序):用因子的取值序列 $\boldsymbol{f}_t$ 作解释变量,对每个资产估计暴露:

式 (2.17) · 第一步:时序回归估计暴露
$$ R_{i,t}^e \;=\; a_i + \boldsymbol{\beta}_i^{\top} \boldsymbol{f}_t + \varepsilon_{i,t}, \qquad t = 1, \dots, T $$
$\boldsymbol{f}_t$第 $t$ 期 $K$ 个因子的取值(可以是 GDP 增速这类非收益率变量)
$a_i$截距——注意符号不是 $\alpha_i$:解释变量不是因子收益率时,截距不再有定价误差的含义,只是回归的截距
$\boldsymbol{\beta}_i$要拿到第二步去用的暴露估计 $\hat{\boldsymbol{\beta}}_i$
第一步只要 β,不要截距——它只是"量出每个资产对每个因子有多敏感"。

第二步(截面):把 $N$ 个资产的时序平均收益 $\bar{R}_i^e$ 对 $\hat{\boldsymbol{\beta}}_i$ 做一次截面回归:

式 (2.18)–(2.19) · 第二步:截面回归估计因子溢价
$$ \bar{R}_i^e \;=\; \hat{\boldsymbol{\beta}}_i^{\top} \boldsymbol{\lambda} + \alpha_i \qquad \text{或(含截距)} \qquad \bar{R}_i^e \;=\; \lambda_0 + \hat{\boldsymbol{\beta}}_i^{\top} \boldsymbol{\lambda} + \alpha_i $$
$\bar{R}_i^e$$= \frac{1}{T}\sum_t R_{i,t}^e$:资产 $i$ 的时序平均超额收益,作被解释变量
$\hat{\boldsymbol{\beta}}_i$第一步的暴露估计,作解释变量——注意它是估计值而非真值
$\boldsymbol{\lambda}$回归系数:因子溢价,这一步要估的东西
$\alpha_i$回归残差:定价误差。理论版 (2.18) 不设截距(模型断言 β 为零的资产超额收益为零);实操版 (2.19) 加截距 $\lambda_0$ 以吸收整体性的模型设定偏误(Cochrane 建议)
一句话对比:时序回归"逐个资产回归、再取平均",截面回归"先取平均、再一次回归"。矩阵形式的 OLS 解为式 (2.21):$\hat{\boldsymbol{\lambda}} = (\boldsymbol{\beta}^{\top}\boldsymbol{\beta})^{-1}\boldsymbol{\beta}^{\top}\bar{\boldsymbol{R}}^e$,$\hat{\boldsymbol{\alpha}} = \bar{\boldsymbol{R}}^e - \boldsymbol{\beta}\hat{\boldsymbol{\lambda}}$,其中 $\boldsymbol{\beta}$ 为 $N\times K$ 暴露矩阵。

标准误方面,Cochrane(2005)在"因子与残差独立、各自 IID"的假设下给出了 $\hat{\boldsymbol{\lambda}}$ 与 $\hat{\boldsymbol{\alpha}}$ 的协方差矩阵(式 2.22–2.23):

$$ \Var(\hat{\boldsymbol{\lambda}}) = \frac{1}{T}\Big[ (\boldsymbol{\beta}^{\top}\boldsymbol{\beta})^{-1}\boldsymbol{\beta}^{\top}\boldsymbol{\Sigma}\,\boldsymbol{\beta}(\boldsymbol{\beta}^{\top}\boldsymbol{\beta})^{-1} + \boldsymbol{\Sigma}_f \Big], \qquad \Cov(\hat{\boldsymbol{\alpha}}) = \frac{1}{T}\,\boldsymbol{M}\,\boldsymbol{\Sigma}\,\boldsymbol{M}^{\top}, $$

其中 $\boldsymbol{\Sigma}=\Cov(\boldsymbol{\varepsilon}_t)$、$\boldsymbol{\Sigma}_f=\Cov(\boldsymbol{f}_t)$、$\boldsymbol{M} = \boldsymbol{I}_N - \boldsymbol{\beta}(\boldsymbol{\beta}^{\top}\boldsymbol{\beta})^{-1}\boldsymbol{\beta}^{\top}$ 是投影残差矩阵;实际使用时以样本量代替总体量。有了 $\Cov(\hat{\boldsymbol{\alpha}})$ 就可以构建联合检验 $\hat{\boldsymbol{\alpha}}^{\top}\Cov(\hat{\boldsymbol{\alpha}})^{+}\hat{\boldsymbol{\alpha}} \sim \chi^2_{N-K}$(上标 $+$ 表示伪逆——$\Cov(\hat{\boldsymbol{\alpha}})$ 秩亏,自由度也因此是 $N-K$ 而非 $N$)。

生成回归变量与 EIV 问题 generated regressors / errors-in-variables

第二步回归的"自变量"其实是第一步的估计值,自带误差;用带误差的尺子量东西,量出来的结果会系统性偏差,报出的把握(标准误)也会虚高。

$\hat{\boldsymbol{\beta}}_i$ 是估计值而非真值,这类解释变量称为生成回归变量(generated regressors),带来计量经济学中经典的变量误差(errors-in-variables,EIV)问题:$\hat{\boldsymbol{\lambda}}$ 的估计有偏(经典 EIV 中趋向于把系数往零压),且忽略这层误差会低估标准误。Shanken(1992)修正的做法是给 $\Var(\hat{\boldsymbol{\lambda}})$ 中来自残差的第一项乘上放大系数 $\big(1+\boldsymbol{\lambda}^{\top}\boldsymbol{\Sigma}_f^{-1}\boldsymbol{\lambda}\big)$——因子信噪比越高,修正越小。此外,$\alpha_i$ 在截面上相关会让 OLS 标准误严重低估,可改用 GLS:$\hat{\boldsymbol{\lambda}}_{GLS} = (\boldsymbol{\beta}^{\top}\boldsymbol{\Sigma}^{-1}\boldsymbol{\beta})^{-1}\boldsymbol{\beta}^{\top}\boldsymbol{\Sigma}^{-1}\bar{\boldsymbol{R}}^e$——按"噪声小的资产多说话"重新加权。

截面回归的赠品:纯因子组合

截面 OLS 的解 $\hat{\boldsymbol{\lambda}} = (\boldsymbol{\beta}^{\top}\boldsymbol{\beta})^{-1}\boldsymbol{\beta}^{\top}\bar{\boldsymbol{R}}^e$ 里藏着一个非常重要的副产品。把前面那块矩阵单独拎出来:

式 (2.33) · 纯因子组合:$\boldsymbol{\Omega}\boldsymbol{\beta} = \boldsymbol{I}_K$
$$ \boldsymbol{\Omega} \;\equiv\; (\boldsymbol{\beta}^{\top}\boldsymbol{\beta})^{-1}\boldsymbol{\beta}^{\top} \quad (K\times N), \qquad \boldsymbol{\Omega}\,\boldsymbol{\beta} \;=\; \boldsymbol{I}_K $$
$\boldsymbol{\Omega}$$K\times N$ 矩阵:第 $k$ 行是一组对 $N$ 个资产的权重——因子 $k$ 的一个投资组合
$\omega_{ki}$$\boldsymbol{\Omega}$ 的第 $k$ 行第 $i$ 列:资产 $i$ 在因子 $k$ 组合中的权重
$\boldsymbol{\Omega}\boldsymbol{\beta}=\boldsymbol{I}_K$第 $k$ 行权重与暴露矩阵第 $j$ 列的内积:$j=k$ 时为 1、$j\ne k$ 时为 0——组合对自己的因子暴露恰为 1、对其他因子暴露恰为 0
这正是 2.1.1 节因子模拟组合的"条件一"被精确满足的版本!排序法只能粗糙地压低其他因子暴露,截面回归则用代数直接把它们清零。$\boldsymbol{\Omega}$ 的第 $k$ 行称为因子 $k$ 的纯因子组合(pure factor portfolio),$\hat{\lambda}_k = \boldsymbol{\Omega}_{k\cdot}\bar{\boldsymbol{R}}^e$ 就是这个组合的平均收益。因此通常认为,截面回归的因子收益率比排序法更"干净"。这也是 Barra 类业界模型的理论根基(2.3 节、第 7 章)。

时序 vs 截面:同一条直线的两种画法

对风格因子来说两种方法都可用,差异可以浓缩成一张对照:时序回归的截面直线被 $(0,0)$ 和 $(1,\bar{\lambda})$ 两点钉死,因子溢价就是排序组合收益的时序均值;截面回归的直线以最小化全体 $\hat{\alpha}_i^2$ 为目标、同时利用所有资产的信息,因子溢价是纯因子组合的收益。两者给出的 $\hat{\lambda}$ 一般不相等。一个实用技巧:把两种方法同时跑一遍,如果时序回归的直线斜率为正、截面回归的斜率却为负(各资产平均收益与 β 整体呈负相关,只有因子组合自己在高处),说明这个因子"只富了自己、没富截面",多半有问题,需要进一步排查。

Fama–MacBeth 回归

Fama–MacBeth 回归 Fama–MacBeth regression, 1973

不做"一次"截面回归,而是每个月都做一次,得到 T 个因子收益率估计;把这 T 个数当作 T 个独立样本,用它们的均值和波动来做检验。

第一步与两步截面回归完全相同:时序回归估计 $\hat{\boldsymbol{\beta}}_i$。第二步不同:不是把收益先做时间平均再回归一次,而是在每一期 $t$ 都做一次截面回归——$T$ 期就是 $T$ 次回归。原文为检验 CAPM 而生,却因其巧妙的标准误处理成为计量经济学被引最多的论文之一;Petersen(2009)统计,面板数据研究中约三分之一仍在使用它。

式 (2.36)–(2.37) · Fama–MacBeth 第二步:逐期截面回归
$$ R_{i,t}^e \;=\; \hat{\boldsymbol{\beta}}_i^{\top} \boldsymbol{\lambda}_t + \alpha_{i,t} \qquad \text{或} \qquad R_{i,t}^e \;=\; \lambda_{0,t} + \hat{\boldsymbol{\beta}}_i^{\top} \boldsymbol{\lambda}_t + \alpha_{i,t}, \qquad i=1,\dots,N $$
$R_{i,t}^e$第 $t$ 期的截面收益(是当期值,不是时序均值)——每个 $t$ 单独回归一次
$\boldsymbol{\lambda}_t$第 $t$ 期的因子收益率估计 $\hat{\boldsymbol{\lambda}}_t$——每期一个,串成时间序列
$\lambda_{0,t}$可选的逐期截距,用于吸收模型设定偏误;检验因子溢价时学界通常带上它
$\alpha_{i,t}$第 $t$ 期资产 $i$ 的截面残差
每一期都问一遍"这期暴露高的资产是否真的赚得多",回归系数 $\hat{\boldsymbol{\lambda}}_t$ 就是这一期因子的"售价"。
式 (2.38)–(2.41) · Fama–MacBeth:估计与标准误
$$ \hat{\boldsymbol{\lambda}} = \frac{1}{T}\sum_{t=1}^{T} \hat{\boldsymbol{\lambda}}_t, \quad \hat{\alpha}_i = \frac{1}{T}\sum_{t=1}^{T} \hat{\alpha}_{i,t}, \qquad \mathrm{s.e.}(\hat{\lambda}_k) = \frac{\mathrm{std}(\hat{\lambda}_{k,t})}{\sqrt{T}} $$
$\hat{\boldsymbol{\lambda}}$因子溢价估计:$T$ 个逐期估计的均值
$\hat{\alpha}_i$资产 $i$ 的定价误差估计:逐期残差的均值
$\mathrm{s.e.}(\hat{\lambda}_k)$把 $\{\hat{\lambda}_{k,t}\}$ 当作 $T$ 个独立抽样,标准误就是"样本标准差除以 $\sqrt{T}$"——和式 (2.2) 长得一模一样
妙处在这里:每一期的 $\hat{\lambda}_{k,t}$ 已经把当期整个截面的信息浓缩成一个数,资产之间收益的截面相关性被"折叠"进了 $\hat{\lambda}_{k,t}$ 自身的波动里。于是用 $\{\hat{\lambda}_{k,t}\}$ 的时序波动算标准误,天然就把截面相关处理掉了——不需要估计任何 $N\times N$ 的相关结构。定价误差的联合检验同理:用 $\Cov(\hat{\boldsymbol{\alpha}}) = \frac{1}{T^2}\sum_t (\hat{\boldsymbol{\alpha}}_t-\hat{\boldsymbol{\alpha}})(\hat{\boldsymbol{\alpha}}_t-\hat{\boldsymbol{\alpha}})^{\top}$ 构建 $\hat{\boldsymbol{\alpha}}^{\top}\Cov(\hat{\boldsymbol{\alpha}})^{+}\hat{\boldsymbol{\alpha}} \sim \chi^2_{N-K}$。

Fama–MacBeth 还有一个实践上极受欢迎的性质:它不要求 $\hat{\boldsymbol{\beta}}_i$ 全程不变。原文就用滚动窗口估计暴露——第 $t$ 期的截面回归使用截至 $t-1$ 期数据估出的 $\hat{\boldsymbol{\beta}}_{i,t-1}$:

式 (2.45)–(2.46) · 时变暴露的 Fama–MacBeth 回归
$$ R_{i,t}^e \;=\; \lambda_{0,t} + \hat{\boldsymbol{\beta}}_{i,t-1}^{\top} \boldsymbol{\lambda}_t + \alpha_{i,t} $$
$\hat{\boldsymbol{\beta}}_{i,t-1}$用截至 $t-1$ 期的滚动窗口数据估计的暴露——下标 $t-1$ 强调"只用过去的信息",避免前视偏差
暴露会随公司基本面漂移,滚动估计让模型"活"起来;这也是它在业界选股模型中广泛应用的形态(2.3 节还会看到:连 $\hat{\beta}$ 本身都可以直接换成公司特征)。
误区

"Fama–MacBeth 修正了所有标准误问题"——不对。它只解决截面相关:把每期截面压缩成一个 $\hat{\lambda}_t$,资产之间怎么相关都无所谓。但它对两件事无能为力:(1)时序相关——若 $\hat{\lambda}_{t}$ 序列自身有自相关,$\mathrm{std}/\sqrt{T}$ 会低估标准误,需要再叠加 Newey–West 调整(2.4 节);(2)EIV——第二步用的仍是估计出来的 $\hat{\boldsymbol{\beta}}$,仍需 Shanken 修正。好在股票收益的时序相关通常很弱、截面相关很强,所以它在实务里"药效对症"。

下图展示 Fama–MacBeth 的"手感":逐期截面回归得到的 $\hat{\lambda}_t$ 是一条剧烈波动的序列(单期几乎没有信息量),检验的对象是它的均值能否从噪声里浮出来——累计均值曲线随 $T$ 增大逐渐稳定到真实溢价附近。

图 2-2 | 模拟数据:Fama–MacBeth 逐期截面回归得到的因子收益率 λ̂t(120 个月,数据生成时真实月度溢价为 0.5%)及其累计均值。单期估计噪声极大,检验靠的是均值随 √T 收敛。(示意图)

三种回归方法对比

时序回归两步截面回归Fama–MacBeth 回归
因子收益率序列必须已知(排序法构建)不需要,任何因子取值序列即可不需要
β 从哪来与 λ、α 同一回归给出第一步时序回归第一步时序回归(可滚动、可用特征代替)
λ 从哪来因子收益率的时序均值一次截面回归("先均值、再估计")逐期截面回归再取均值("先估计、再均值")
α 从哪来时序回归截距截面回归残差逐期截面残差的时序均值
截面直线怎么定被 $(0,0)$、$(1,\bar{\lambda})$ 钉死最小化全体 α 平方和,用尽所有资产信息
截面相关GRS 通过 $\hat{\boldsymbol{\Sigma}}$ 处理OLS 标准误被低估,需 GLS天然免疫(核心卖点)
时序相关假设无(否则需 GMM)假设无无能为力,需叠加 Newey–West
EIV 问题不存在(β 非生成变量)存在,Shanken 修正存在,Shanken 修正 / 工具变量(2.3 节)
联合检验 αGRS(有限样本 F 检验)$\chi^2_{N-K}$$\chi^2_{N-K}$
旁注

两点研究心得。其一,所有模型都是"不完美"的:只要往左侧塞进足够多的资产,任何多因子模型的联合检验都会被拒绝。所以实证中不用个股(一定拒绝)而用"打包"的投资组合做测试资产,且评价模型看的是因子背后的逻辑,不是统计上的完美。其二,这些方法在很大程度上殊途同归:当 $\hat{\boldsymbol{\beta}}$ 全程不变时,Fama–MacBeth 的点估计与两步截面回归完全一致(差别只在标准误)。比较不同方法的结果、理解差异从何而来,才是学它们的最大价值。

要点
  • 检验多因子模型三步走:估 β → 估截面关系(λ、α)→ 检验(α 联合为零 + λ 逐个显著)。
  • 时序回归要求因子收益率已知,截距即 α,配 GRS 有限样本检验;截面直线过 $(0,0)$ 与 $(1,\bar{\lambda})$。
  • 两步截面回归适用于任何因子;第二步的 β 是生成回归变量 → EIV → Shanken 修正;截面相关 → GLS。
  • 截面回归附赠纯因子组合 $\boldsymbol{\Omega}=(\boldsymbol{\beta}^{\top}\boldsymbol{\beta})^{-1}\boldsymbol{\beta}^{\top}$:对自身因子暴露为 1、对其他因子为 0。
  • Fama–MacBeth = 逐期截面回归 + 把 $\hat{\lambda}_t$ 当独立样本:天然处理截面相关,但处理不了时序相关和 EIV。

2.3因子暴露和因子收益率

上一节留下一个未深究的环节:Fama–MacBeth 第二步的解释变量 $\hat{\boldsymbol{\beta}}$ 到底应该从哪来?传统答案是"第一步时序回归",但它是生成回归变量,EIV 问题挥之不去。Fama 和 MacBeth 当年的缓解办法是不用个股、改用按 β 分组的投资组合做资产——个股 β 的估计误差在组合层面互相抵消。此后"用组合做测试资产"成了主流。但 Roll 等人(Jegadeesh et al. 2019)对此不买账:把个股打包成组合是一种降维,会抹掉大量截面特征;若待检验的因子恰好与这些组合正交,检验就永远发现不了它的溢价。他们主张回到个股,并给出两条对付 EIV 的新路:工具变量,以及干脆用公司特征当暴露。

路线一:工具变量

把第 $t$ 期含截距的截面回归写成矩阵形式。令 $\boldsymbol{Z}_t \equiv [\boldsymbol{1}_N,\ \hat{\boldsymbol{\beta}}_t]$($N\times(K{+}1)$),$\boldsymbol{\zeta}_t \equiv [\gamma_t, \lambda_{1t}, \dots, \lambda_{Kt}]^{\top}$,则式 (2.47) 堆叠为:

式 (2.48)–(2.49) · 截面回归的 IV 估计量(Jegadeesh et al. 2019)
$$ \boldsymbol{R}_t^e = \boldsymbol{Z}_t \boldsymbol{\zeta}_t + \boldsymbol{\alpha}_t, \qquad \hat{\boldsymbol{\zeta}}_t^{IV} = \big( \boldsymbol{Z}_{IV,t}^{\top} \boldsymbol{Z}_t \big)^{-1} \boldsymbol{Z}_{IV,t}^{\top} \boldsymbol{R}_t^e $$
$\boldsymbol{Z}_t$$[\boldsymbol{1}_N, \hat{\boldsymbol{\beta}}_t]$:截距列加暴露估计,作解释变量
$\boldsymbol{\zeta}_t$$(K{+}1)$ 维:截距 $\gamma_t$ 加 $K$ 个因子的当期收益率
$\boldsymbol{Z}_{IV,t}$工具变量矩阵:用互不重叠的另一段数据估出的暴露 $\hat{\boldsymbol{\beta}}_t^{IV}$(加截距列)
$\hat{\boldsymbol{\zeta}}_t^{IV}$IV 估计量:在两套 β 的估计误差互不相关的前提下,是因子收益率的无偏估计
EIV 之所以让 OLS 有偏,是因为解释变量的误差和它自己相关。工具变量的思路是找一个"与真值相关、与误差无关"的替身:用奇数月数据估的 β 做解释变量、偶数月数据估的 β 做工具(当月为偶数月时反过来),两套估计误差来自不重叠的样本,互不相关,偏差便被消掉。原文用过去三年日频数据按奇偶月分拆估计。

路线二:直接用公司特征

更"颠覆"的做法是砍掉第一步时序回归:把公司特征(firm characteristic)标准化后直接当作因子暴露。比如价值因子,不再回归求 β,而是直接用每只股票的 BM(标准化后)作为它对价值因子的暴露。Jegadeesh 等人在美股上做了一场"对决"实验:把时序回归 β 和公司特征同时放进 Fama–MacBeth 回归,结果是只有公司特征作为暴露的因子被定价了——特征暴露的规模、价值因子 t 值高度显著(绝对值约 4),而时序 β 暴露的因子 t 值全线跌破 2。无论用 OLS 还是 IV 估计量,结论都一样。

为什么"β 打不过特征"?两个角度:(1)日频收益噪声大,时序回归估出的 β 本身不稳定,逐期截面回归时它表现得近乎随机变量,难以载住稳定溢价;(2)真实暴露谁也没见过,β 和特征都只是它的代理变量,实证上(含原书作者在 A 股的验证)当期特征比最新的时序 β 更能预测下期收益——特征可能就是更好的代理。深层机制仍是开放问题。

两类模型的对偶

沿着这两条路,学术界把多因子模型分成了两大家族,而它们恰好是一对"对偶":一个把因子收益率当已知、解β;另一个把暴露当已知、解因子收益率。

时序多因子模型(学术传统,FF 1993 一脉)截面多因子模型(Barra 型,业界主流)
因子收益率排序法构建组合,收益率可观测逐期截面回归估计出来(纯因子组合收益)
因子暴露时序回归估计出来公司特征标准化后直接给定
已知 / 待估已知 $\lambda_t$,估 $\beta$已知 $\beta$(=特征),估 $\lambda_t$
典型代表FF3、FF5、q-factor 等七大学术模型(第 4 章)Barra CNE 系列风险模型(第 7 章)
Barra 型截面模型(无编号) · 特征即暴露
$$ R_{i,t}^e \;=\; \boldsymbol{x}_{i,t-1}^{\top} \boldsymbol{f}_t + \varepsilon_{i,t}, \qquad i = 1,\dots,N $$
$\boldsymbol{x}_{i,t-1}$股票 $i$ 在 $t-1$ 期末的一组公司特征(对数市值、BM 等),经去极值、标准化处理,当作暴露——用 $t-1$ 期的值保证可投资性
$\boldsymbol{f}_t$第 $t$ 期截面回归的系数:各因子当期收益率,即待估对象
$\varepsilon_{i,t}$特质收益
与式 (2.13) 对照着看最清楚:时序模型里 $\lambda_t$ 在右边当数据、$\beta$ 当系数;Barra 模型里位置互换,$x$ 当数据、$f_t$ 当系数。同一个双线性结构 $\beta^{\top}\lambda$,从哪一侧"进刀"决定了整个建模流派。

那么两类模型谁更能解释预期收益的截面差异?Fama and French(2020)亲自下场回答——结论有点"打脸"自家 27 年的传统:截面模型胜出,其定价误差整体上更接近零;且暴露要用时变的公司特征(把特征在时序上取平均反而变差)。他们还测试了一个"四不像":用截面回归的因子收益率、再回头做时序回归估 β——效果与传统时序模型相仿、仍不如截面模型。这说明截面模型的优势是"纯因子组合的收益率更干净"与"时变特征是更好的暴露代理"两者缺一不可。本书第 3 章按学术惯例用排序法检验因子,第 4 章则用特征暴露 + Fama–MacBeth 检验,正好让你把两类方法各练一遍。

要点
  • EIV 的三种对策:打包成组合(传统)、工具变量(奇偶月分拆估 β)、干脆用公司特征当暴露。
  • 实证赛果:特征暴露的因子被定价、时序 β 暴露的因子不被定价(美股与 A 股均如此)。
  • 两类模型对偶:时序模型"知 λ 估 β",Barra 截面模型"知 β(特征)估 λ"。
  • FF(2020):截面模型解释力更强,条件是用时变特征;这与业界 Barra 的做法殊途同归。

2.4异象检验

过去三十年,学者们在美股"挖"出了数百个异象。Hou 等人(2020)花大力气复现了 452 个已发表的异象,结果令人尴尬:绝大多数拿不出多因子模型解释不了的显著 α(第 6 章会细说这场"复现危机")。正因为假异象遍地,检验方法本身才格外重要——本节先讲怎么检验,再讲检验中最容易踩的计量坑:异方差与自相关。

时序回归检验 α

异象组合的构造套路与因子如出一辙:选一个财务或量价指标作异象变量(anomaly variable)→ 排序法构建多空组合、得到异象收益率序列 → 检验这串收益能否被多因子模型解释。近年的趋势是用复合变量(多个指标合成打分)构造异象,如 Asness 等人的质量异象(quality minus junk)、Piotroski 和 So 的预期差异象:金融学含义更强,但变量越多越容易过拟合,这是一体两面。

式 (2.50) · 异象检验的时序回归
$$ R_t^{A} \;=\; \alpha + \boldsymbol{\beta}^{\top} \boldsymbol{\lambda}_t + \varepsilon_t, \qquad t = 1, \dots, T $$
$R_t^{A}$异象组合第 $t$ 期的收益率(上标 $A$ 表示 anomaly),作被解释变量
$\boldsymbol{\lambda}_t$选定的多因子模型中 $K$ 个因子的收益率,作解释变量
$\boldsymbol{\beta}$异象组合在各因子上的暴露:它的取值告诉你哪些因子"吃掉"了异象收益的哪部分
$\alpha$截距:异象收益中因子解释不了的部分——整场检验的主角。原假设 $H_0:\alpha=0$
异象是"相对于模型"的:这本质上是拿异象收益去让模型"报销",报销不掉的余额就是 α。换一个更强的模型,α 可能就没了。
式 (2.51) · α 的 t 检验
$$ t \;=\; \frac{\hat{\alpha}}{\mathrm{s.e.}(\hat{\alpha})} \;\sim\; t_{\,T-K-1} $$
$\hat{\alpha},\ \mathrm{s.e.}(\hat{\alpha})$OLS 给出的截距估计及其标准误
$T-K-1$自由度:$T$ 期数据减去 $K+1$ 个解释变量($K$ 个因子加截距)
拒绝 $H_0$,才有资格称 $R_t^A$ 背后的组合为异象。但这个 t 值成立的前提是 OLS 标准误可信——而金融时间序列偏偏最爱破坏这个前提。

计量经济学问题:异方差与自相关

暂时跳出多因子模型,看一般的线性回归。经典 OLS 的标准误公式建立在"扰动独立、同方差"之上;金融数据两条都常常不满足。把这两种"病"统一写进模型:

式 (2.52) · 广义线性回归模型
$$ \boldsymbol{y} = \boldsymbol{X}\boldsymbol{b} + \boldsymbol{\varepsilon}, \qquad \E[\boldsymbol{\varepsilon}\,|\,\boldsymbol{X}] = \boldsymbol{0}, \qquad \Cov(\boldsymbol{\varepsilon}\,|\,\boldsymbol{X}) = \sigma^2 \boldsymbol{\Upsilon} $$
$\boldsymbol{y},\ \boldsymbol{X}$$T$ 维被解释变量向量;$T\times(K{+}1)$ 解释变量矩阵($K$ 个变量加截距列)
$\boldsymbol{b}$$(K{+}1)$ 维回归系数向量
$\sigma^2\boldsymbol{\Upsilon}$扰动的协方差矩阵($T\times T$ 正定阵)。经典模型假设 $\boldsymbol{\Upsilon}=\boldsymbol{I}$;异方差(heteroskedasticity)= 对角线元素不相等;自相关(autocorrelation)= 非对角线元素不为零
重要的事实:这两种病不影响 OLS 系数估计的无偏性——$\hat{\boldsymbol{b}}=(\boldsymbol{X}^{\top}\boldsymbol{X})^{-1}\boldsymbol{X}^{\top}\boldsymbol{y}$(式 2.55)照用不误。病灶全在标准误:用错公式,t 值就是假的。
式 (2.56) · OLS 系数方差的"三明治"公式
$$ \Var(\hat{\boldsymbol{b}}) \;=\; \frac{1}{T}\left( \frac{\boldsymbol{X}^{\top}\boldsymbol{X}}{T} \right)^{-1} \boldsymbol{Q} \left( \frac{\boldsymbol{X}^{\top}\boldsymbol{X}}{T} \right)^{-1}, \qquad \boldsymbol{Q} \;\equiv\; \frac{1}{T}\,\boldsymbol{X}^{\top}\big(\sigma^2\boldsymbol{\Upsilon}\big)\boldsymbol{X} $$
两片"面包"$(\boldsymbol{X}^{\top}\boldsymbol{X}/T)^{-1}$:只与解释变量有关,样本里直接可算,没有争议
$\boldsymbol{Q}$夹心:$\frac{1}{T}\sum_i\sum_j \sigma_{ij}\,\boldsymbol{x}_i \boldsymbol{x}_j^{\top}$,其中 $\boldsymbol{x}_t$ 是 $\boldsymbol{X}$ 第 $t$ 行的转置、$\sigma_{ij}$ 是扰动的协方差——一切修正工作都是在正确地估计这块夹心
当 $\boldsymbol{\Upsilon}=\boldsymbol{I}$ 时三明治塌缩成课本公式 $\sigma^2(\boldsymbol{X}^{\top}\boldsymbol{X})^{-1}$(式 2.57)。扰动一旦异方差或自相关,塌缩不成立,必须老老实实估计 $\boldsymbol{Q}$。

White 估计量与 Newey–West 估计量

估计夹心的原料只有两样:解释变量 $\boldsymbol{X}$ 和 OLS 残差 $\hat{\varepsilon}_t$。只有异方差、没有自相关时,夹心只剩"同期"项,White(1980)给出了渐进相合的估计:

式 (2.60)–(2.61) · White 异方差相合估计量
$$ \hat{\boldsymbol{\Gamma}}_0 \;=\; \frac{1}{T} \sum_{t=1}^{T} \hat{\varepsilon}_t^{\,2}\, \boldsymbol{x}_t \boldsymbol{x}_t^{\top}, \qquad \hat{\boldsymbol{V}}_{White} \;=\; \frac{1}{T}\left( \frac{\boldsymbol{X}^{\top}\boldsymbol{X}}{T} \right)^{-1} \hat{\boldsymbol{\Gamma}}_0 \left( \frac{\boldsymbol{X}^{\top}\boldsymbol{X}}{T} \right)^{-1} $$
$\hat{\varepsilon}_t$第 $t$ 期的 OLS 残差——用它的平方充当第 $t$ 期未知的扰动方差
$\boldsymbol{x}_t$第 $t$ 期的解释变量向量($\boldsymbol{X}$ 第 $t$ 行的转置,$(K{+}1)$ 维)
$\hat{\boldsymbol{\Gamma}}_0$"零阶自协方差"矩阵:只用同期的 $(\hat{\varepsilon}_t \boldsymbol{x}_t)$ 与自己配对
妙处在于对异方差的结构一无所知也能用:不需要建模每期方差是多少,让残差自己说话。多因子模型的残差方差结构天然未知,这个性质正中要害。

要把自相关也纳进来,直觉上似乎把所有跨期项 $\hat{\varepsilon}_t\hat{\varepsilon}_s \boldsymbol{x}_t\boldsymbol{x}_s^{\top}$ 全加进去就行(式 2.62 的思路)。但这样做是错的:$T^2$ 项求和只除以 $T$,结果可能不收敛;即便收敛,加总出的矩阵也可能不正定——协方差矩阵不正定显然荒谬。Newey 和 West(1987)的解法是截断加权

式 (2.63)–(2.64) · Newey–West 异方差自相关相合(HAC)估计量
$$ \boldsymbol{S} \;=\; \hat{\boldsymbol{\Gamma}}_0 + \sum_{j=1}^{J} w_j \big( \hat{\boldsymbol{\Gamma}}_j + \hat{\boldsymbol{\Gamma}}_j^{\top} \big), \qquad w_j = 1 - \frac{j}{J+1}, \qquad \hat{\boldsymbol{\Gamma}}_j = \frac{1}{T} \sum_{t=j+1}^{T} \hat{\varepsilon}_t \hat{\varepsilon}_{t-j}\, \boldsymbol{x}_t \boldsymbol{x}_{t-j}^{\top} $$
$\hat{\boldsymbol{\Gamma}}_j$滞后 $j$ 阶的样本自协方差矩阵:残差与 $j$ 期前的残差配对;$\hat{\boldsymbol{\Gamma}}_j + \hat{\boldsymbol{\Gamma}}_j^{\top}$ 同时纳入"$t$ 对 $t-j$"与"$t-j$ 对 $t$"两个方向,保证 $\boldsymbol{S}$ 对称
$J$最大滞后阶数(截断点):只数到 $J$ 阶为止,解决"不收敛"问题
$w_j$Bartlett 权重:从 $1-\frac{1}{J+1}$ 线性递减到 $1-\frac{J}{J+1}$,滞后越远权重越小。线性递减不是美学选择——正是这组权重保证了 $\boldsymbol{S}$ 半正定,解决"不正定"问题
$\hat{\boldsymbol{V}}_{NW}$把 $\boldsymbol{S}$ 塞回三明治:$\hat{\boldsymbol{V}}_{NW} = \frac{1}{T}\big( \frac{\boldsymbol{X}^{\top}\boldsymbol{X}}{T} \big)^{-1} \boldsymbol{S} \big( \frac{\boldsymbol{X}^{\top}\boldsymbol{X}}{T} \big)^{-1}$(式 2.64),对角线开方即各系数的标准误
第一项就是 White 估计量(管异方差),求和项是自相关修正。权重递减也有直觉:远处的自相关本来就该衰减,而且高阶 $\hat{\boldsymbol{\Gamma}}_j$ 用到的样本对更少、噪声更大,理应少信一点。论文里的"Newey–West adjusted t-statistic",指的就是用这套 $\hat{\boldsymbol{V}}_{NW}$ 算的 t 值——实证资产定价论文几乎人手一份。

$J$ 怎么选?Newey 和 West(1994)给出常用的自动规则(式 2.65):$J = \big\lfloor 4\,(T/100)^{2/9} \big\rfloor$,其中 $\lfloor\cdot\rfloor$ 为向下取整——月度数据 240 期对应 $J=4$,600 期对应 $J=5$。

检验中最常见的特例是对单一收益率序列的均值做 Newey–West 调整(比如排序法得到的因子收益率 $\{\lambda_t\}$)。技巧是把"求均值"看成一次退化的回归:被解释变量为 $\lambda_t$、解释变量只有常数 1,回归系数恰是样本均值,残差恰是离差:

式 (2.66)–(2.67) · 单序列均值的 Newey–West 标准误
$$ S \;=\; \hat{\gamma}_0 + 2 \sum_{j=1}^{J} \Big( 1 - \frac{j}{J+1} \Big)\, \hat{\gamma}_j, \qquad \Var(\bar{\lambda}) \;=\; \frac{S}{T}, \qquad \hat{\gamma}_j = \frac{1}{T} \sum_{t=j+1}^{T} \hat{u}_t \hat{u}_{t-j} $$
$\hat{u}_t$$= \lambda_t - \bar{\lambda}$:收益率对自身均值的离差(退化回归的残差)
$\hat{\gamma}_j$序列的 $j$ 阶样本自协方差;标量情形下 $\hat{\Gamma}_j+\hat{\Gamma}_j^{\top}$ 合并成 $2\hat{\gamma}_j$
$\Var(\bar{\lambda})$解释变量恒为 1 时 $\boldsymbol{X}^{\top}\boldsymbol{X}=T$,三明治化简为 $S/T$;开方即经 NW 调整的标准误
对照式 (2.2):朴素标准误只用了 $\hat{\gamma}_0$。若序列正自相关($\hat{\gamma}_j$ 大于 0),真实的均值方差比朴素公式大——每期观测不再是独立信息,"有效样本量"比 $T$ 小。忽略这一点,t 值被系统性吹大。

下图把这件事做成实验:对一条月均 0.5%、波动 3% 的 AR(1) 收益序列(600 个月),拖动自相关系数 $\rho$,对比朴素标准误、Newey–West 标准误和理论真值 $\sqrt{\frac{\sigma^2}{T}\cdot\frac{1+\rho}{1-\rho}}$。$\rho$ 越大,朴素公式错得越离谱;NW 大幅纠偏(高 $\rho$ 时因截断仍略有低估)。

图 2-3 | 模拟数据:AR(1) 收益序列(T=600,月均 0.5%,波动 3%)样本均值的三种标准误。当前 。朴素公式忽略自相关,会把 t 值虚增至真实值的数倍。(示意图)
误区

"我的因子 t 值 2.5,稳了"——先问一句:标准误做过 Newey–West 调整吗?若收益序列一阶自相关达 0.4,朴素 t 值大约被吹大 $\sqrt{(1+0.4)/(1-0.4)} \approx 1.5$ 倍,"t=2.5"的真实水平可能只有 1.6。反过来的错误同样常见:对几乎无自相关的序列堆一个巨大的 $J$,白白增加估计噪声。$J$ 按式 (2.65) 的规则取即可。

截面回归检验异象

时序回归检验的是"异象组合的收益能否被因子收益解释";换一个角度,异象存在等价于异象变量能预测下期收益。这就回到了 Fama–MacBeth 的主场:把异象变量和多因子模型的因子变量(即构建因子用的公司特征)一起放进逐期截面回归,个股超额收益作被解释变量。异象变量的逐期回归系数 $\hat{\lambda}_t^{a}$ 串成序列后,检验其均值是否显著——标准误用式 (2.67) 做 NW 调整。若在控制了因子变量后异象变量的溢价仍显著,则认定它是多因子模型解释不了的异象。相比排序法"只能控制一两个变量、且把信息压缩成分组",截面回归可以同时控制任意多个变量、保留变量的连续取值,这是它检验异象的独特优势。

要点
  • 时序回归检验异象:$R_t^A$ 对因子收益率回归,看截距 $\alpha$ 的 t 值(自由度 $T-K-1$)。
  • 异方差和自相关不弄脏 OLS 系数,只弄脏标准误;修正的靶子是三明治公式的夹心 $\boldsymbol{Q}$。
  • White 管异方差($\hat{\boldsymbol{\Gamma}}_0$);Newey–West 加上截断加权的自相关项 $\sum w_j(\hat{\boldsymbol{\Gamma}}_j+\hat{\boldsymbol{\Gamma}}_j^{\top})$,Bartlett 权重保证半正定。
  • 单序列均值的 NW 方差 $=\big[\hat{\gamma}_0 + 2\sum w_j \hat{\gamma}_j\big]/T$;正自相关时朴素 t 值被虚增。
  • Fama–MacBeth + 控制变量 = 截面视角的异象检验:控制其他变量后异象变量是否仍预测收益。

2.5多因子模型比较

模型都不完美,但有些模型有用——那么两个模型摆在面前,怎么科学地比出高下?记住一条主线:"两个目标、两个切入点、多种方法"。两个目标(Barillas–Shanken):模型能否解释同一组测试资产(test assets);模型能否解释对方的因子(互相检验)。两个切入点:把 $N$ 个定价误差联合检验(GRS、均值–方差张成),还是逐个检验后汇总(α 检验)。方法本身不挑被解释对象——测试资产和别家因子都能当靶子。

GRS 检验:夏普比率视角

GRS 统计量在 2.2.1 节已给出(式 2.16),照公式算就行,但那串矩阵运算看不出检验的"灵魂"。它还有一个漂亮得多的等价形式:

式 (2.68) · GRS 统计量的夏普比率形式
$$ \mathrm{GRS} \;=\; \frac{T-N-K}{N} \cdot \frac{\hat{\theta}_{N+K}^2 - \hat{\theta}_K^2}{1 + \hat{\theta}_K^2} \;\sim\; F_{N,\;T-N-K} $$
$\hat{\theta}_K$只用 $K$ 个因子能构造出的事后(ex post)最大夏普比率——因子天团的最好成绩
$\hat{\theta}_{N+K}$$K$ 个因子加上 $N$ 个测试资产一起,能构造出的事后最大夏普比率
$\hat{\theta}_{N+K}^2 - \hat{\theta}_K^2$恒等式:正好等于式 (2.16) 分子 $\hat{\boldsymbol{\alpha}}^{\top}\hat{\boldsymbol{\Sigma}}^{-1}\hat{\boldsymbol{\alpha}}$;同样 $1+\hat{\theta}_K^2 = 1+\bar{\boldsymbol{\lambda}}^{\top}\hat{\boldsymbol{\Sigma}}_{\lambda}^{-1}\bar{\boldsymbol{\lambda}}$——两种写法是同一个统计量
GRS 问的是一个投资问题:把这 N 个资产加进因子组合池,能不能显著推高可达到的最大夏普比率?推不高——模型已榨干了这些资产的信息,α 联合为零;显著推高——资产里有模型没捕捉的收益来源。"定价检验"与"投资价值"在此合二为一。

几何图景:在(波动率, 超额收益)平面上,假设存在无风险利率且可无限借贷,有效前沿是从原点(超额收益坐标下)出发、与风险资产最小方差前沿相切的切线,斜率即切点组合的夏普比率。GRS 画两条切线——只用 $K$ 个因子的、用全部 $N+K$ 个资产的——检验第二条是否显著更陡。它只比切点,不关心前沿的其他部分。

误区

GRS 拒绝了原假设,并不告诉你哪个资产惹的祸——联合检验只对"整体"发言。想定位罪魁,要回到逐资产的 α 检验。另外注意它的适用条件:残差 IID 正态、且 $T$ 必须大于 $N+K$(想用几百个组合当测试资产,就得有更长的样本)。

应用示例:Liu、Stambaugh 和 Yuan(2019)用 GRS 让中国版三因子模型与 FF 三因子在 A 股上互相检验——结果中国版三因子能解释 FF 因子,反之不行,故前者更适合 A 股(第 4 章详述)。

均值–方差张成检验

均值–方差张成 mean–variance spanning, Huberman–Kandel 1987

K 个因子按各种比例混搭,能画出一条"最优可达"的收益–风险边界;问:新加 N 个资产后,这条边界有没有实质性外扩?没有,就说这 N 个资产被原来的 K 个因子"张成"了——它们是多余的。

对每个目标预期收益,都存在方差最小的组合;把它们连成曲线就是最小方差前沿(minimum-variance frontier),由 $K$ 个因子"张成"(spanned)。张成检验比较"$K$ 个因子的前沿"与"$N+K$ 个资产的前沿"是否重合。与 GRS 最大的不同:它不假设无风险利率存在,因此不能只比一个切点,而要比整条前沿——由两基金分离定理(前沿上任意两点即可生成整条前沿),比较两个特殊组合就够了。

式 (2.70)–(2.71) · 张成回归与原假设
$$ \boldsymbol{R}_{2,t} = \boldsymbol{\alpha} + \boldsymbol{\beta}\, \boldsymbol{R}_{1,t} + \boldsymbol{\varepsilon}_t, \qquad H_0:\; \boldsymbol{\alpha} = \boldsymbol{0}_N \ \text{ 且 }\ \boldsymbol{\delta} \equiv \boldsymbol{1}_N - \boldsymbol{\beta}\,\boldsymbol{1}_K = \boldsymbol{0}_N $$
$\boldsymbol{R}_{1,t},\ \boldsymbol{R}_{2,t}$$K$ 个因子、$N$ 个测试资产在第 $t$ 期的收益率向量
$\boldsymbol{\alpha},\ \boldsymbol{\beta}$$N$ 维截距向量、$N\times K$ 回归系数矩阵
$\boldsymbol{1}_N,\ \boldsymbol{1}_K$元素全为 1 的向量;$\boldsymbol{\delta}=\boldsymbol{0}_N$ 即 $\boldsymbol{\beta}$ 每行系数之和为 1
$H_0$ 的两个条件各守一个特殊组合:$\boldsymbol{\alpha}=\boldsymbol{0}$ 保证切点型组合(从原点向前沿引切线的切点)里新资产权重全为零;$\boldsymbol{\delta}=\boldsymbol{0}$(系数和为 1,即复制组合是不加杠杆的真组合)保证全局最小方差组合里新资产权重全为零。两个特殊组合都不含新资产,由两基金分离定理,整条前沿都不含——这就是"$\boldsymbol{\alpha}=\boldsymbol{0}$ 且 $\boldsymbol{\delta}=\boldsymbol{0}$ 是张成的充要条件"的几何证明。直观说:每个新资产都能被因子组合复制出"同均值、更低方差"的替身(均值相同靠 $H_0$,方差更低是因为复制品甩掉了 $\Var(\varepsilon_t)$)。
似然比统计量(渐进形式) · 张成检验怎么算
$$ LR \;=\; T \,\ln \frac{\big|\hat{\boldsymbol{\Sigma}}_{r}\big|}{\big|\hat{\boldsymbol{\Sigma}}_{u}\big|} \;\xrightarrow{d}\; \chi^2_{2N} $$
$\hat{\boldsymbol{\Sigma}}_{u}$不加约束地估计回归 (2.70) 得到的残差协方差矩阵(unrestricted)
$\hat{\boldsymbol{\Sigma}}_{r}$强行施加 $H_0$($\boldsymbol{\alpha}=\boldsymbol{0},\boldsymbol{\delta}=\boldsymbol{0}$)后重新估计的残差协方差矩阵(restricted);约束只会让残差变大,故行列式之比大于等于 1
$2N$自由度 = 约束个数:$N$ 个 $\alpha_i=0$ 加 $N$ 个 $\delta_i=0$
"戴上镣铐后模型变差了多少"——变差得越多,$H_0$ 越可疑。与 LR 同族的还有 Wald(W)和拉格朗日乘数(LM)统计量,三者渐进等价、都趋于 $\chi^2_{2N}$,有限样本中恒有 $LM \le LR \le W$。Kan 和 Zhou(2012)给出了三者的有限样本分布与几何解释:它们都在比较两条前沿的"综合差距"——全局最小方差组合的标准差之比,加上某个特殊纵轴点出发的切线斜率之比——只是三种统计量挑选的特殊点略有不同。

应用示例:Han 等人(2016)提出综合多时间尺度信息的趋势因子后,用张成检验证明短期反转、中期动量、长期反转三个传统因子无法张成它——加入趋势因子后前沿显著外扩,新因子有增量价值。

几何对比:GRS vs 张成检验

GRS 检验均值–方差张成检验
无风险利率假设存在且可无限借贷不假设存在,适用面更广
几何对象两条切线:只比切点组合的夏普比率两条前沿:比全局最小方差组合 + 切点型组合两处
原假设$\boldsymbol{\alpha}=\boldsymbol{0}_N$($N$ 个约束)$\boldsymbol{\alpha}=\boldsymbol{0}_N$ 且 $\boldsymbol{\delta}=\boldsymbol{0}_N$($2N$ 个约束)
分布有限样本精确 $F_{N,T-N-K}$渐进 $\chi^2_{2N}$(有限样本形式见 Kan–Zhou)
直觉一句话新资产能否推高最大夏普比率新资产能否让整条前沿外扩

α 检验:逐个击破再汇总

联合检验把 $N$ 个 α 捆在一起审;α 检验反其道而行:对每个测试资产单独做时序回归(式 2.50),得到 $\hat{\alpha}_i$ 及其 NW 调整后的 t 值,然后取绝对值的平均——$\mathrm{avg}|\hat{\alpha}_i|$ 和 $\mathrm{avg}|t_i|$——作为模型的"平均定价误差"记分牌。取绝对值是因为只关心偏离零的幅度、不关心方向。两个指标越低,模型越好。它的优点是简单、能定位具体是哪些资产没被解释;缺点是忽略了 α 之间的相关性、没有严格的联合分布。所以实证论文的标准操作是 GRS + α 检验搭配上阵(Hou 等 2015、FF 2020 皆如此),第 4 章的实证也会两个一起用。

贝叶斯方法:换一套哲学

频率派检验问"若 $\boldsymbol{\alpha}=\boldsymbol{0}$,数据有多反常";贝叶斯方法直接问"给定数据,哪个模型更可能是真的"。Barillas 和 Shanken(2018)把它引入模型比较:对参数 $\boldsymbol{\beta}$、$\boldsymbol{\Sigma}$ 设非正常先验(improper prior),$\boldsymbol{\alpha}$ 在原假设下为零、备择下服从 $N(\boldsymbol{0}, \tau\boldsymbol{\Sigma})$,然后计算各模型的边际似然:

式 (2.81)–(2.82) · 边际似然与后验概率比
$$ p(D \mid M_i) = \int p(D \mid \boldsymbol{\theta}, M_i)\, p(\boldsymbol{\theta} \mid M_i)\, d\boldsymbol{\theta}, \qquad \frac{P(M_i \mid D)}{P(M_j \mid D)} = \frac{P(M_i)}{P(M_j)} \cdot \frac{p(D \mid M_i)}{p(D \mid M_j)} $$
$D,\ M_i$观测数据(因子与资产收益率);第 $i$ 个候选多因子模型
$\boldsymbol{\theta}$模型参数($\boldsymbol{\alpha},\boldsymbol{\beta},\boldsymbol{\Sigma}$ 等),按先验分布积掉
$p(D\mid M_i)$边际似然(marginal likelihood):模型 $M_i$ 下观察到这份数据的概率——对参数的所有可能取值加权平均后的"平均解释力"
$\dfrac{p(D\mid M_i)}{p(D\mid M_j)}$贝叶斯因子(Bayes factor);先验概率相同时它独自决定模型排序
边际似然自带"奥卡姆剃刀":参数多而空洞的模型把先验概率摊薄在大片解释不了数据的参数区域上,平均似然反而被拉低。因此它天然惩罚过度复杂的模型——这是频率派检验没有的品质。
旁注

这套方法也有争议。Chib 等人(2020)在 Journal of Finance 发文(标题就是在 Barillas–Shanken 的标题前加个 On,火药味十足)指出:使用非正常先验时,边际似然里含有任意常数,只有当各候选模型的先验分布、常数与参数空间完全可比时,边际似然之比才有意义,而 Barillas–Shanken 的设定不满足,须按他们的修正先验重做。贝叶斯比较模型的思想很有生命力,但具体实施尚在论战中,本手册点到为止。

要点
  • 比较模型的主线:两个目标(解释测试资产 / 解释对方因子)× 两个切入点(联合 / 逐个)。
  • GRS = "加入新资产能否显著推高最大夏普比率",有限样本精确 F 检验,但只看切点、需无风险利率假设。
  • 张成检验 = "新资产能否让前沿外扩",$H_0:\boldsymbol{\alpha}=\boldsymbol{0},\ \boldsymbol{\delta}=\boldsymbol{0}$($2N$ 约束),不需要无风险利率。
  • α 检验用 $\mathrm{avg}|\hat{\alpha}|$、$\mathrm{avg}|t|$ 逐个记账,与 GRS 互补搭配。
  • 贝叶斯方法用边际似然给模型排座次,自带简约惩罚,但先验设定仍有争议。

2.6因子正交化

业界构建多因子模型时几乎必做一步"正交化"。动机先讲经济学的:两个因子"正交"意味着它们代表不同的收益驱动力。反例是用市盈率和市净率各造一个价值因子——两个指标高度相关,两个价差组合几乎是同一个组合,模型看着有两个因子,其实只解释了收益里同一块"价值"成分。因子相似与否,体现为资产对它们的暴露在截面上的相关性;正交化就是把这种相关性压掉。

再讲统计的:用 Fama–MacBeth 截面回归求因子收益率时,暴露(解释变量)之间高度相关会让回归系数的标准误爆炸——这就是多重共线性。要理解为什么,得从回归的运行机制看起。考虑一般模型 $\boldsymbol{y}=\boldsymbol{X}\boldsymbol{b}+\boldsymbol{\varepsilon}$,其 OLS 解 $\hat{\boldsymbol{b}}=(\boldsymbol{X}^{\top}\boldsymbol{X})^{-1}\boldsymbol{X}^{\top}\boldsymbol{y}$(式 2.84)里坐着 $\boldsymbol{X}^{\top}\boldsymbol{X}$——解释变量两两之间的内积矩阵。相关性正是从这里渗进每个系数的。

基石:一元回归

式 (2.85) · 一元回归(无截距)的 OLS 解
$$ \hat{b} \;=\; \frac{\langle \boldsymbol{x}, \boldsymbol{y} \rangle}{\langle \boldsymbol{x}, \boldsymbol{x} \rangle} $$
$\langle \boldsymbol{x}, \boldsymbol{y} \rangle$向量内积 $\sum_{i} x_i y_i$
$\hat{b}$模型 $\boldsymbol{y} = b\boldsymbol{x} + \boldsymbol{\varepsilon}$ 的 OLS 系数
这是全节的原子操作。关键推论(式 2.86):若多元回归的解释变量两两正交($\langle \boldsymbol{x}_i,\boldsymbol{x}_j \rangle = 0$,$i \ne j$),则 $\boldsymbol{X}^{\top}\boldsymbol{X}$ 是对角阵,多元 OLS 的每个系数恰好等于各自的一元回归系数 $\langle \boldsymbol{x}_i,\boldsymbol{y}\rangle / \langle \boldsymbol{x}_i,\boldsymbol{x}_i\rangle$——变量之间互不干扰,多元回归退化成一堆一元回归。非正交时这个美好性质立刻失效。

回归的几何意义:投影

式 (2.87) · OLS 残差与解释变量正交
$$ \boldsymbol{X}^{\top} \hat{\boldsymbol{\varepsilon}} \;=\; \boldsymbol{X}^{\top} \big( \boldsymbol{y} - \boldsymbol{X}\hat{\boldsymbol{b}} \big) \;=\; \boldsymbol{X}^{\top}\boldsymbol{y} - \boldsymbol{X}^{\top}\boldsymbol{X} (\boldsymbol{X}^{\top}\boldsymbol{X})^{-1} \boldsymbol{X}^{\top}\boldsymbol{y} \;=\; \boldsymbol{0} $$
$\hat{\boldsymbol{\varepsilon}}$样本残差向量 $\boldsymbol{y}-\boldsymbol{X}\hat{\boldsymbol{b}}$
$\boldsymbol{X}^{\top}\hat{\boldsymbol{\varepsilon}}=\boldsymbol{0}$残差与每一个解释变量的内积都为零——垂直
几何上,OLS 就是把 $\boldsymbol{y}$ 垂直投影到解释变量张成的子空间上:拟合值 $\boldsymbol{X}\hat{\boldsymbol{b}}$ 是投影(子空间内离 $\boldsymbol{y}$ 最近的点),残差是垂线。变量正交时,往平面上的投影 = 往各坐标轴投影再相加,系数互不影响;变量斜着靠在一起时,投影没法逐轴分解——每个系数都要"扣除"其他变量的功劳,这正是下面正交化过程做的事。

Gram–Schmidt 正交化与 FWL 定理

既然正交的世界如此美好,那就动手把变量改造成正交的。做法是连续正交化:按任意顺序处理解释变量,每个变量都对"前面已处理好的正交向量"回归,只留残差:

式 (2.92) · Gram–Schmidt 连续正交化
$$ \boldsymbol{z}_0 = \boldsymbol{x}_0, \qquad \boldsymbol{z}_k \;=\; \boldsymbol{x}_k - \sum_{j=0}^{k-1} \frac{\langle \boldsymbol{z}_j, \boldsymbol{x}_k \rangle}{\langle \boldsymbol{z}_j, \boldsymbol{z}_j \rangle}\, \boldsymbol{z}_j, \qquad k = 1, \dots, K $$
$\boldsymbol{x}_0, \dots, \boldsymbol{x}_K$按任意顺序排列的 $K{+}1$ 个解释变量(含截距列,截距也是解释变量)
$\frac{\langle \boldsymbol{z}_j, \boldsymbol{x}_k \rangle}{\langle \boldsymbol{z}_j, \boldsymbol{z}_j \rangle} \boldsymbol{z}_j$$\boldsymbol{x}_k$ 在 $\boldsymbol{z}_j$ 上的投影(就是一次式 2.85 的一元回归拟合值)
$\boldsymbol{z}_k$$\boldsymbol{x}_k$ 被前面所有正交向量解释后的残差:$\boldsymbol{x}_k$ 中"独有"的那部分信息,与 $\boldsymbol{z}_0,\dots,\boldsymbol{z}_{k-1}$ 全部正交
每一步都是"剥洋葱":把 $\boldsymbol{x}_k$ 里能被前面变量解释的成分剥掉,只留新鲜信息。
式 (2.93)–(2.94) · FWL:最后一个变量的多元回归系数
$$ \hat{b}_K \;=\; \frac{\langle \boldsymbol{z}_K, \boldsymbol{y} \rangle}{\langle \boldsymbol{z}_K, \boldsymbol{z}_K \rangle}, \qquad \Var(\hat{b}_K) \;=\; \frac{\sigma^2}{\langle \boldsymbol{z}_K, \boldsymbol{z}_K \rangle} = \frac{\sigma^2}{\lVert \boldsymbol{z}_K \rVert^2} $$
$\hat{b}_K$多元回归中 $\boldsymbol{x}_K$ 的 OLS 系数——却等于一个简单的一元回归:$\boldsymbol{y}$ 对正交化残差 $\boldsymbol{z}_K$ 回归
$\sigma^2$扰动方差($y_i$ 独立同分布假设下)
$\lVert \boldsymbol{z}_K \rVert^2$$\boldsymbol{x}_K$ 被其他所有变量解释后残差的"长度"平方——$\boldsymbol{x}_K$ 独有信息的多少
这就是 Frisch–Waugh–Lovell(FWL)定理的思想:多元回归系数 = 变量先被其他变量正交化、再拿残差做一元回归的系数。它只对"最后一个被正交化"的变量成立,但处理顺序是任意的——想要谁的系数,就把谁排到最后。方差公式则解释了共线性的杀伤机制:$\boldsymbol{x}_K$ 与其他变量越相关,残差 $\boldsymbol{z}_K$ 越短,$\Var(\hat{b}_K)$ 越大——样本稍有风吹草动,系数就大幅摇摆。

回到因子投资:Fama–MacBeth 截面回归里的 $\hat{b}_K$ 就是因子 $K$ 的收益率。暴露高度相关的两个因子,各自的"独有信息" $\boldsymbol{z}$ 都很短,因子收益率估计都极不稳定。所以业界宁可先动手改造因子:Barra 中国模型中,非线性市值因子就是对市值因子正交化后的残差。顺带一提两个实用细节:(1)不必为每个系数各跑一遍正交化——按一个顺序正交化到底后,可以从 $\hat{b}_K$ 出发倒序递推出全部系数(从 $\boldsymbol{y}$ 中减去 $\hat{b}_K \boldsymbol{x}_K$,则 $\boldsymbol{x}_{K-1}$ 成了"最后一个",以此类推);(2)正交化的顺序有经济含义——排在前面的变量保留全部原始信息,排在后面的只剩残差,所以业界惯例是把逻辑上更"根本"的因子(如市值)放前面,让衍生因子对它正交。

误区

"正交化会改变模型的解释力"——不会。正交化只是对解释变量做可逆的线性变换,变量组张成的子空间不变,拟合值、残差、$R^2$ 全都不变;变的只是系数的归属:共同信息记到谁头上,取决于谁排在前面。因此汇报正交化因子的收益率时,必须同时说明正交化顺序,否则数字没法解读。

要点
  • 正交化的经济动机:让每个因子代表一种独立的驱动力;统计动机:压住共线性导致的标准误爆炸。
  • OLS 的几何本质是垂直投影,残差与解释变量正交;变量正交时多元回归退化为一堆一元回归。
  • Gram–Schmidt 连续正交化 + FWL:任何变量的多元回归系数 = 它被其余变量正交化后的残差对 $\boldsymbol{y}$ 的一元回归系数。
  • $\Var(\hat{b}_K)=\sigma^2/\lVert\boldsymbol{z}_K\rVert^2$:残差越短(共线性越强),估计越不稳。
  • 正交化不改变模型整体解释力,只重新分配系数——顺序即话语权。

2.7广义矩估计

前面的方法各有各的假设:GRS 要正态、截面回归要 IID、Fama–MacBeth 怕时序相关。有没有一个框架,假设最少、什么模型都能检验?有——Hansen(1982)的广义矩估计(Generalized Method of Moments,GMM)。它当年是为检验基于消费的资产定价模型(CCAPM)而生的:CCAPM 里消费与收益率的关系是非线性的,传统回归束手无策;GMM 则完全不挑模型的函数形式。Hansen 因此与 Fama、Shiller 分享了 2013 年诺贝尔经济学奖。Cochrane 说过,学 GMM 最大的障碍只是符号多;把符号拆开,它的数学核心其实就一件事——算样本均值的方差。所以先从这件小事说起。

地基:样本均值的方差

随机变量 $u_t$ 的样本均值 $\bar{u}=\frac{1}{T}\sum_t u_t$ 本身也是随机变量:换一段历史,它就换一个值。它晃动多大?由方差的展开式(式 2.100):$\Var(\bar{u}) = \frac{1}{T^2}\sum_{t}\sum_{s}\Cov(u_t, u_s)$。若 $u_t$ 独立同分布,交叉项全灭,得到统计课上最著名的结果 $\mathrm{s.e.}(\bar{u})=\sigma/\sqrt{T}$(式 2.102)。金融数据不独立,就要保留自协方差项:

式 (2.104)–(2.105) · 样本均值方差的渐进形式与谱密度矩阵 S
$$ \Var(\bar{u}) \;=\; \frac{1}{T} \sum_{j=-(T-1)}^{T-1} \Big( 1 - \frac{|j|}{T} \Big)\, \gamma_j \;\;\xrightarrow{\,T\to\infty\,}\;\; \frac{S}{T}, \qquad S \;\equiv\; \sum_{j=-\infty}^{\infty} \E\big[ u_t\, u_{t-j}^{\top} \big] $$
$\gamma_j$$=\Cov(u_t, u_{t-j})$:$j$ 阶自协方差;$j=0$ 项就是普通方差
$1-\frac{|j|}{T}$有限样本里滞后 $j$ 的观测对只有 $T-|j|$ 对,权重随之递减;$T\to\infty$ 时趋于 1
$S$谱密度矩阵(spectral density matrix,零频率处):所有阶自协方差之和。第二个等号用了 $\E[u_t]=0$ 的假设,把 $\Cov$ 写成 $\E[u_t u_{t-j}^{\top}]$
$\Var(\bar{u}) \to S/T$——就这一个式子,支撑起 GMM 全部的标准误公式。眼熟吗?2.4 节 Newey–West 的 $S=\hat{\gamma}_0+2\sum w_j\hat{\gamma}_j$ 正是这个无穷和的截断加权样本估计。NW 估计量其实就是 GMM 世界观的先遣队。

GMM 三部曲

GMM 框架永远分三步:提出模型(写成矩条件)→ 连接数据(样本矩替换总体矩、估参数)→ 检验模型(算方差、做检验)。

式 (2.106) · 第一部分:总体矩条件
$$ \E\big[ \boldsymbol{f}(\boldsymbol{x}_t, \boldsymbol{b}_0) \big] \;=\; \boldsymbol{0} $$
$\boldsymbol{x}_t$数据向量(收益率、消费增速……)
$\boldsymbol{b}_0$$p$ 维真实参数向量
$\boldsymbol{f}(\cdot,\cdot)$$n$ 维函数向量:你猜想的模型。每个分量是一个矩条件(moment condition)——"若模型为真,这个量的总体均值应为零"。整组矩条件就是原假设
资产定价的矩条件从万物之源 $p_t=\E[m_{t+1}x_{t+1}]$(式 2.107,随机折现因子定价公式,见附录 A)流出:无风险资产给出 $\E[m(\boldsymbol{b}_0)R^f]-1=0$,零成本多空组合给出 $\E[m(\boldsymbol{b}_0)R^e]=0$。$f$ 不必线性、不必可解析求解——这是 GMM 能吃下 CCAPM 的原因。
式 (2.111)、(2.113)、(2.129) · 第二部分:样本矩与 GMM 估计量
$$ \boldsymbol{g}_T(\boldsymbol{b}) \;=\; \frac{1}{T}\sum_{t=1}^{T} \boldsymbol{f}(\boldsymbol{x}_t, \boldsymbol{b}), \qquad \boldsymbol{a}\,\boldsymbol{g}_T(\hat{\boldsymbol{b}}) = \boldsymbol{0} \quad\Longleftrightarrow\quad \hat{\boldsymbol{b}} = \arg\min_{\boldsymbol{b}}\; \boldsymbol{g}_T(\boldsymbol{b})^{\top} \boldsymbol{W}\, \boldsymbol{g}_T(\boldsymbol{b}) $$
$\boldsymbol{g}_T(\boldsymbol{b})$样本矩:$\boldsymbol{f}$ 的样本均值($n$ 维)——注意,它是一个样本均值
$n \gt p$矩多于参数,称过度识别(overidentification):不可能让 $n$ 个样本矩全为零,只能让它们的 $p$ 个线性组合为零
$\boldsymbol{a}$$p\times n$ 组合矩阵:每行挑一种"哪些矩必须精确成立"的组合——由使用者选择
$\boldsymbol{W}$$n$ 阶半正定权重矩阵:等价表述——让加权的矩偏离总量最小。两种写法通过 $\boldsymbol{a}=\boldsymbol{d}^{\top}\boldsymbol{W}$ 互相转换($\boldsymbol{d}$ 见下)
若模型为真,样本矩应接近零;GMM 就是"调参数,把样本矩摁到零附近"。矩恰好等于参数个数时(恰好识别)解唯一;矩更多时,$\boldsymbol{a}$ 或 $\boldsymbol{W}$ 决定"信谁多一点"。
式 (2.115)–(2.116) · 第三部分:渐进方差(三明治又来了)
$$ \Var(\hat{\boldsymbol{b}}) = \frac{1}{T} (\boldsymbol{a}\boldsymbol{d})^{-1} \boldsymbol{a}\, \boldsymbol{S}\, \boldsymbol{a}^{\top} \big[(\boldsymbol{a}\boldsymbol{d})^{-1}\big]^{\top}, \qquad \Var\big(\boldsymbol{g}_T(\hat{\boldsymbol{b}})\big) = \frac{1}{T} \big( \boldsymbol{I}_n - \boldsymbol{d}(\boldsymbol{a}\boldsymbol{d})^{-1}\boldsymbol{a} \big) \boldsymbol{S} \big( \boldsymbol{I}_n - \boldsymbol{d}(\boldsymbol{a}\boldsymbol{d})^{-1}\boldsymbol{a} \big)^{\top} $$
$\boldsymbol{d}$$\equiv \E\big[\partial \boldsymbol{f}(\boldsymbol{x}_t,\boldsymbol{b}_0)/\partial \boldsymbol{b}^{\top}\big]$:矩条件对参数的敏感度($n\times p$ 雅可比矩阵,样本中用 $\partial \boldsymbol{g}_T/\partial \boldsymbol{b}^{\top}$ 估计)
$\boldsymbol{S}$$\boldsymbol{f}(\boldsymbol{x}_t,\boldsymbol{b}_0)$ 的谱密度矩阵——正是式 (2.105) 的 $S$,样本中用 NW 类估计量算
$\boldsymbol{I}_n - \boldsymbol{d}(\boldsymbol{a}\boldsymbol{d})^{-1}\boldsymbol{a}$估计"消耗"了 $p$ 个自由度后剩下的方向:$\hat{\boldsymbol{b}}$ 已把 $p$ 个矩组合摁死在零,剩余矩的波动只在这块投影里
推导全程只用两招:$\Var(\boldsymbol{g}_T(\boldsymbol{b}_0))=\boldsymbol{S}/T$(样本均值的方差!),加一阶泰勒展开(delta 方法)把 $\hat{\boldsymbol{b}}$ 和 $\boldsymbol{g}_T$ 的方差联系起来。看似吓人的公式,本质只是"均值的方差 × 线性传播"。

有效性与 J 检验

式 (2.128) · 有效 GMM:最优的 a 与 W
$$ \boldsymbol{a}^{*} = \boldsymbol{d}^{\top} \boldsymbol{S}^{-1} \;\;\Longleftrightarrow\;\; \boldsymbol{W}^{*} = \boldsymbol{S}^{-1}, \qquad \text{此时 } \Var(\hat{\boldsymbol{b}}) = \frac{1}{T} \big( \boldsymbol{d}^{\top} \boldsymbol{S}^{-1} \boldsymbol{d} \big)^{-1} $$
$\boldsymbol{W}^{*}=\boldsymbol{S}^{-1}$给定这组矩的前提下让 $\Var(\hat{\boldsymbol{b}})$ 最小的权重——有效(efficient)GMM 估计量
$\boldsymbol{d}^{\top}\boldsymbol{S}^{-1}\boldsymbol{d}$信息量矩阵:矩对参数越敏感($\boldsymbol{d}$ 大)、矩自身噪声越小($\boldsymbol{S}$ 小),参数估得越准
$\boldsymbol{S}/T$ 是各矩的"噪声水平",取 $\boldsymbol{W}=\boldsymbol{S}^{-1}$ 就是噪声大的矩少信、噪声小的矩多信——加权最小二乘的老智慧。实操用两阶段:先取 $\boldsymbol{W}=\boldsymbol{I}$ 估出初版 $\hat{\boldsymbol{b}}$,用它估 $\boldsymbol{S}$,再取 $\boldsymbol{W}=\boldsymbol{S}^{-1}$ 重估(可迭代)。注意很多软件与教材默认 $\boldsymbol{W}=\boldsymbol{S}^{-1}$ 并只给简化公式,换了别的 $\boldsymbol{W}$ 必须回到式 (2.115)–(2.116) 的一般形式。
式 (2.126)–(2.127) · 过度识别检验(J 检验)
$$ J \;=\; T \cdot \boldsymbol{g}_T(\hat{\boldsymbol{b}})^{\top} \,\Big[ T\cdot\Var\big(\boldsymbol{g}_T(\hat{\boldsymbol{b}})\big) \Big]^{+}\, \boldsymbol{g}_T(\hat{\boldsymbol{b}}) \;\sim\; \chi^2_{\,n-p} $$
$[\cdot]^{+}$伪逆:$\Var(\boldsymbol{g}_T(\hat{\boldsymbol{b}}))$ 秩亏($p$ 个方向被摁成零),不可普通求逆
$n-p$自由度:$n$ 个矩里有 $p$ 个被用来定参数,只剩 $n-p$ 个"多余"的矩可供打分。有效 GMM 下统计量简化为 $T\,\boldsymbol{g}_T^{\top}\boldsymbol{S}^{-1}\boldsymbol{g}_T$
参数已尽力,剩余矩条件仍然显著偏离零?那不是运气,是模型错了。在资产定价里,矩条件就是各资产的定价误差,J 检验就是"α 联合为零"检验的 GMM 版——不要求正态、不要求同方差、不要求无自相关。

为什么说 GMM 统一了前面的一切

回头看本章走过的路,几乎每个方法都是 GMM 的特例:

前文方法对应的 GMM 设定
因子收益率 t 检验(2.1 节)单个矩条件 $\E[\lambda_t - \lambda]=0$,$n=p=1$;$S$ 只取 $\gamma_0$ 即朴素标准误
Newey–West 调整(2.4 节)同上,但 $S$ 用截断加权和估计——NW 估计量本来就是 $S$ 的估计器
时序回归 + OLS 标准误(2.2.1 节)矩条件 $\E[\varepsilon_{i,t}]=0,\ \E[\varepsilon_{i,t}\boldsymbol{\lambda}_t]=\boldsymbol{0}$(OLS 正规方程即矩条件);残差 IID 时塌缩为课本公式
GRS 检验(2.2.1 节)上一行再加正态假设后的有限样本精化;放松假设则由 J 检验接管
截面回归 / Shanken 修正(2.2.2 节)把第一步、第二步的矩条件同时写进 $\boldsymbol{f}$,EIV 的误差传播被公式 (2.115) 自动记账——Shanken 修正是其特例
Fama–MacBeth(2.2.4 节)逐期截面正规方程作为矩条件;FM 标准误对应特定的 $\boldsymbol{a}$ 与只取 $\gamma_0$ 的 $S$

这就是"统一"的含义:各方法的差异,不过是矩条件选哪些、$\boldsymbol{S}$ 怎么估、$\boldsymbol{a}$/$\boldsymbol{W}$ 怎么选的差异。想放松哪条假设,就在对应的部件上换零件,不必换整个框架。

不应成为黑箱

误区

"把矩条件塞进软件、选 $\boldsymbol{W}=\boldsymbol{S}^{-1}$、报告 J 值"——这套流水线最危险。$\boldsymbol{W}=\boldsymbol{S}^{-1}$ 的"有效"是给定这组矩的统计有效,它会为了压低参数方差而给"噪声小但业务上无关紧要"的矩很高话语权;而矩的取舍本身才是经济学问题。市场上有无数资产、能写出无数矩条件,一味追求统计有效性等于让统计软件替你决定研究什么。

Hansen 框架的真正强大之处恰恰是允许你从业务出发选 $\boldsymbol{a}$。原书举的例子:用市场组合、无风险资产、HML、SMB 四个资产检验 CCAPM($n=4$ 个矩、$p=2$ 个参数)。与其让四个矩加权和稀泥,不如手工指定 $\boldsymbol{a}$:让市场与无风险资产的矩条件精确成立(用它们定参数),把 HML 和 SMB 留作检验——此时 J 检验(自由度 $4-2=2$)问的正是"CCAPM 能否解释价值和规模溢价"这个真正要紧的问题。GMM 是趁手的兵器,不是自动驾驶。

要点
  • GMM 的数学核心 = 样本均值的方差 $\Var(\bar{u})\to S/T$ + delta 方法;$S$ 是全部自协方差之和,NW 估计量就是它的样本版。
  • 三部曲:矩条件 $\E[\boldsymbol{f}(\boldsymbol{x}_t,\boldsymbol{b}_0)]=\boldsymbol{0}$ → 样本矩 $\boldsymbol{g}_T$ 估参数($\boldsymbol{a}\boldsymbol{g}_T=\boldsymbol{0}$ 或 min $\boldsymbol{g}_T^{\top}\boldsymbol{W}\boldsymbol{g}_T$)→ 方差与 J 检验。
  • $\boldsymbol{W}=\boldsymbol{S}^{-1}$ 统计上最优(噪声大的矩少信),J 统计量 $\sim\chi^2_{n-p}$ 检验剩余矩。
  • 本章各方法都是 GMM 特例;差别只在矩条件、$S$ 的估计与权重的选择。
  • 矩的选择是经济学问题:从业务出发定 $\boldsymbol{a}$,别让 GMM 变成黑箱。

2.8研究方法建议

方法都在手了,最后按研究对象把"学术界惯例套餐"整理成三张清单,第 3~5 章的 A 股实证将严格照此执行:

研究对象惯例流程
异象① 排序法构建异象组合(先单变量;常与市值做条件双重排序以排除小市值干扰);② 时序回归对选定多因子模型求 α,Newey–West 调整后做 t 检验(2.4.1–2.4.3 节);③ Fama–MacBeth 回归加入常见控制变量,验证异象变量对收益率的预测力是否幸存(2.4.4 节)。
因子① 金融学逻辑先行——没有故事的变量不配进候选池(风险补偿或错误定价,二选一说清楚);② 排序法构建因子组合,检验收益率显著性(NW 调整);③ Fama–MacBeth 回归检验因子溢价(2.3 节:暴露可用公司特征)。
多因子模型① 用已发表异象作测试资产,GRS 检验联合定价误差;② 与已有模型互相检验:同组测试资产用 GRS + α 检验,因子互为测试资产用 GRS + 均值–方差张成检验(2.5 节);③ 贝叶斯方法可作补充证据。

最后重复两句贯穿全章的提醒:统计显著只是入场券,不是终点——大样本下任何模型都会被拒绝,方法给出的是证据的强度,结论还要靠经济学逻辑撑腰;标准误比点估计更容易骗人——看到 t 值先问三个问题:截面相关处理了吗(FM / GLS),时序相关处理了吗(NW),生成回归变量修正了吗(Shanken / IV)。带着这两句话,就可以进入第 3 章,对主流因子逐一动手实证了。

本章练习

练习刻意有难度:做完前三题,等于亲手实现了本章三件主力武器。代码题请准备 Python 环境(numpy,练习 2.3 另需 scipy),先自己写,再看提示,最后对答案。

练习 2.1 手写完整的 Fama–MacBeth 回归 代码题

下面的代码生成一个两因子世界:200 只股票、240 个月,真实月度溢价分别为 0.6% 和 0.3%,定价误差全为零。请不用任何回归库(只用 numpy 线性代数)实现完整的 Fama–MacBeth 流程:

  1. 第一步:对每只股票做带截距的时序回归,估出暴露矩阵 beta_hat(提示:把 240×200 的收益率矩阵一次性回归,不要写 200 次循环);
  2. 第二步:在每个月 t,用 beta_hat(加截距列)对当月截面收益做 OLS,得到 240 组逐期估计;
  3. 对每个因子:报告 λ 的均值、标准误(std/√T)和 t 值,并与真值比较;同时报告截距项的均值与 t 值——它应当不显著,为什么?
import numpy as np
rng = np.random.default_rng(0)

N, K, T = 200, 2, 240
beta = rng.uniform(-1, 2, (N, K))            # 真实暴露
lam_true = np.array([0.006, 0.003])          # 真实月度溢价
chol = np.diag([0.04, 0.03])                 # 因子月波动 4%、3%
f = lam_true + rng.standard_normal((T, K)) @ chol.T   # 因子收益率序列
eps = 0.05 * rng.standard_normal((T, N))     # 特质波动 5%
R = f @ beta.T + eps                         # T x N,alpha 恒为 0
提示

第一步矩阵化:设 F 为在 f 左侧拼一列 1 的 T×(K+1) 矩阵,则全部股票的回归系数是 lstsq(F, R),取第 2 行起即为暴露的转置。第二步同理:X = [1, beta_hat] 是 N×(K+1),每个月解一次 lstsq(X, R[t])。标准误直接对逐期估计序列用 std(ddof=1)/sqrt(T)

参考答案
import numpy as np
rng = np.random.default_rng(0)
N, K, T = 200, 2, 240
beta = rng.uniform(-1, 2, (N, K))
lam_true = np.array([0.006, 0.003])
chol = np.diag([0.04, 0.03])
f = lam_true + rng.standard_normal((T, K)) @ chol.T
eps = 0.05 * rng.standard_normal((T, N))
R = f @ beta.T + eps

# ---- 第一步:时序回归估计暴露(一次算完全部股票)----
F = np.column_stack([np.ones(T), f])              # T x (K+1)
coef = np.linalg.lstsq(F, R, rcond=None)[0]       # (K+1) x N
beta_hat = coef[1:].T                             # N x K

# ---- 第二步:逐期截面回归(带截距)----
X = np.column_stack([np.ones(N), beta_hat])       # N x (K+1)
lam_t = np.zeros((T, K + 1))
for t in range(T):
    lam_t[t] = np.linalg.lstsq(X, R[t], rcond=None)[0]

# ---- 汇总与检验 ----
lam_hat = lam_t.mean(axis=0)
se = lam_t.std(axis=0, ddof=1) / np.sqrt(T)
t_stat = lam_hat / se
print(f"截距 gamma: {lam_hat[0]:.4%}  t = {t_stat[0]:.2f}   (应不显著)")
for k in range(K):
    print(f"因子{k+1}: lambda = {lam_hat[k+1]:.4%}  se = {se[k+1]:.4%}"
          f"  t = {t_stat[k+1]:.2f}   真值 = {lam_true[k]:.2%}")

典型结果:两个因子的 λ 估计都落在真值一两个标准误之内,t 值双双徘徊在显著性边缘(本组种子下约 2.1 与 1.9)。理论量级可以心算:第二个因子月溢价 0.3%、波动 3%,单位信噪比 0.1/月,240 个月对应 t 约 $0.1\times\sqrt{240}\approx 1.5$——真实存在的因子也完全可能检验不显著。截距项聚拢在零附近:数据生成时没有埋 α,而且第二步加了截距,任何整体性的偏移都会被它吸走而不会冒充因子溢价。若把第一步的 beta_hat 换成真实 beta 重跑,会发现 λ 的 t 值略升——差额就是 EIV 问题的代价。

练习 2.2 手写 Newey–West 标准误,并量化"忽略自相关"的代价 代码题

用下面的函数生成月均 0.5%、波动 4%、一阶自相关 ρ=0.6 的 AR(1) 收益序列(T=600)。请:

  1. 按式 (2.66)–(2.67) 手写单序列均值的 Newey–West 标准误:S = γ̂0 + 2·Σ w_j·γ̂j,w_j = 1 − j/(J+1),J 按式 (2.65) 的规则取;对比朴素标准误 std/√T 与理论真值 sqrt(σ²(1+ρ)/((1−ρ)T));
  2. 做一个 size 实验:令真实均值为 0,重复模拟 2000 次,分别统计"朴素 t 检验"和"NW t 检验"在 5% 名义水平下的实际拒绝率。朴素检验错得有多离谱?NW 完全治好了吗?
import numpy as np

def simulate(rng, T, mu, rho, sig):
    z = rng.standard_normal(T)
    e = np.empty(T)
    e[0] = sig * z[0]
    c = sig * np.sqrt(1 - rho ** 2)      # 保证无条件方差恒为 sig^2
    for t in range(1, T):
        e[t] = rho * e[t - 1] + c * z[t]
    return mu + e
提示

γ̂j 用去均值序列 u 计算:u[j:] @ u[:-j] / T(注意除以 T 而不是 T−j,这是 NW 原文的约定,也顺便压小高阶项)。J = floor(4·(T/100)^(2/9)),T=600 时 J=5。理论真值来自 AR(1) 的自协方差 γj = σ²ρ^j 求和。

参考答案
import numpy as np

def simulate(rng, T, mu, rho, sig):
    z = rng.standard_normal(T)
    e = np.empty(T)
    e[0] = sig * z[0]
    c = sig * np.sqrt(1 - rho ** 2)
    for t in range(1, T):
        e[t] = rho * e[t - 1] + c * z[t]
    return mu + e

def nw_se(x):
    T = len(x)
    J = int(np.floor(4 * (T / 100) ** (2 / 9)))
    u = x - x.mean()
    S = u @ u / T                              # gamma_0
    for j in range(1, J + 1):
        gam = u[j:] @ u[:-j] / T
        S += 2 * (1 - j / (J + 1)) * gam       # Bartlett 权重
    return np.sqrt(max(S, 0.0) / T)

rng = np.random.default_rng(1)
T, mu, rho, sig = 600, 0.005, 0.6, 0.04

# ---- (1) 单次对比 ----
x = simulate(rng, T, mu, rho, sig)
se_naive = x.std(ddof=1) / np.sqrt(T)
se_true = np.sqrt(sig ** 2 * (1 + rho) / (1 - rho) / T)
print(f"朴素 se = {se_naive:.5f}  NW se = {nw_se(x):.5f}  理论 = {se_true:.5f}")

# ---- (2) size 实验:真实均值为 0 ----
M, rej_naive, rej_nw = 2000, 0, 0
for m in range(M):
    x = simulate(rng, T, 0.0, rho, sig)
    se_n = x.std(ddof=1) / np.sqrt(T)
    rej_naive += abs(x.mean() / se_n) > 1.96
    rej_nw += abs(x.mean() / nw_se(x)) > 1.96
print(f"朴素检验拒绝率: {rej_naive / M:.1%}   NW 检验拒绝率: {rej_nw / M:.1%}"
      f"   (名义水平 5%)")

典型结果:ρ=0.6 时理论标准误约为朴素值的 $\sqrt{(1+0.6)/(1-0.6)}=2$ 倍。size 实验中朴素检验的实际拒绝率高达三成以上(本组种子下约 35%)——每三个"纯噪声因子"就有一个被它盖章显著;NW 把拒绝率压回 12% 左右,大幅纠偏但并未完全治愈:截断在 J=5 会漏掉 $\rho^6$ 以后的尾巴,且各阶 $\hat{\gamma}_j$ 本身有估计噪声。这就是为什么强自相关数据(如重叠区间收益)还需要更长的 J 或其他核函数。

练习 2.3 实现 GRS 检验并验证它的 size 代码题

按式 (2.16) 实现 GRS 统计量(N=10 个资产、K=3 个因子、T=240 个月),然后用模拟验证这个检验"没有冤枉好人":

  1. 写函数 grs_stat(R, F):对每个资产做时序回归取截距 α̂,残差协方差用 MLE(除以 T),因子均值与协方差同样除以 T,按公式组装统计量;
  2. 在"α 全为零"的世界里模拟 1000 次,统计 GRS 超过 F 分布 95% 分位数的频率——应接近 5%(检验的 size 正确);
  3. 给第一个资产注入每月 0.4% 的真 α 再模拟 1000 次,看拒绝率(检验的功效)。
提示

把截距并入回归:X = [1, F],系数矩阵第一行即全部 α̂。二次型用 alpha @ np.linalg.solve(Sigma, alpha) 比显式求逆更稳。临界值 scipy.stats.f.ppf(0.95, N, T-N-K)。注意式 (2.16) 的两个协方差矩阵都用除以 T 的 MLE 版本,配的才是精确 F 分布。

参考答案
import numpy as np
from scipy import stats

rng = np.random.default_rng(2)
N, K, T, M = 10, 3, 240, 1000

def grs_stat(R, F):
    T, N = R.shape
    K = F.shape[1]
    X = np.column_stack([np.ones(T), F])
    B = np.linalg.lstsq(X, R, rcond=None)[0]        # (K+1) x N
    alpha = B[0]                                    # 截距行 = alpha 向量
    resid = R - X @ B
    Sigma = resid.T @ resid / T                     # MLE 残差协方差
    fbar = F.mean(axis=0)
    Fc = F - fbar
    Sf = Fc.T @ Fc / T                              # MLE 因子协方差
    quad = alpha @ np.linalg.solve(Sigma, alpha)
    denom = 1 + fbar @ np.linalg.solve(Sf, fbar)
    return (T - N - K) / N * quad / denom

crit = stats.f.ppf(0.95, N, T - N - K)
# 无 scipy 时的替代:crit = np.quantile(rng.f(N, T - N - K, size=200000), 0.95)
beta = rng.uniform(0, 1.5, (N, K))

def run(alpha_inject):
    rej = 0
    for m in range(M):
        F = 0.004 + 0.03 * rng.standard_normal((T, K))
        eps = 0.02 * rng.standard_normal((T, N))
        R = F @ beta.T + eps
        R[:, 0] += alpha_inject                     # 给资产 1 注入真 alpha
        rej += grs_stat(R, F) > crit
    return rej / M

print(f"size  (alpha=0):      拒绝率 = {run(0.0):.1%}   (理论 5%)")
print(f"power (alpha=0.4%/月): 拒绝率 = {run(0.004):.1%}")

典型结果:α 全零时拒绝率非常接近 5%——GRS 的 F 分布是有限样本精确的,只要残差确实 IID 正态,240 个月的样本它也不会"冤枉好人";这正是它优于 χ² 大样本近似的地方。注入单个资产每月 0.4% 的 α 后,拒绝率升到五成上下(残差 2% 波动下该资产单独的 t 约 $0.004/0.02\times\sqrt{240}\approx 3.1$,但联合检验要同时"养活" $N=10$ 个自由度,功效被摊薄)。可以再试 0.2%/月,体会功效如何随 α 缩小而衰减——检验拒绝不了不等于模型是对的,可能只是样本不够长、或 α 藏在联合检验够不着的角落。

练习 2.4 独立排序与条件排序何时不同 推导题

设截面上两个排序变量 $X_1$、$X_2$,均分 $L_1=L_2=2$ 组(按中位数)。(1)证明:当 $X_1$ 与 $X_2$ 在截面上独立时,独立双重排序与条件双重排序(先 $X_1$ 后 $X_2$)给出的分组在大样本下一致,且四个格子的股票数趋于相等。(2)构造一个具体的反例(给出至少 8 只股票的取值),使两种排序把同一只股票分进不同的格子。(3)说明条件排序下"高 $X_2$"标签的真实含义,并解释它与 2.6 节因子正交化的联系。

参考答案

(1) 记 $m_2$ 为 $X_2$ 的全样本中位数、$m_2^{(g)}$ 为 $X_1$ 组 $g$ 内的 $X_2$ 中位数。独立排序按 $X_2 \gtrless m_2$ 贴标签,条件排序按 $X_2 \gtrless m_2^{(g)}$ 贴标签,两者一致当且仅当各组内中位数与全样本中位数一致。若 $X_1 \perp X_2$,则 $X_2$ 在每个 $X_1$ 组内的分布与无条件分布相同,$m_2^{(g)} \to m_2$(大样本),标签一致;且格子概率 $P(X_1 \gtrless m_1,\ X_2 \gtrless m_2) = \frac{1}{2}\cdot\frac{1}{2}$,四格均衡。

(2) 取 8 只股票,$X_1 = 1,2,\dots,8$,且 $X_2 = X_1$(完全正相关的极端情形最清楚)。全样本 $X_2$ 中位数介于 4 与 5 之间。独立排序:低 $X_1$ 组($X_1\le 4$)的股票 $X_2$ 也全部低于中位数,于是"低 $X_1$ 高 $X_2$"与"高 $X_1$ 低 $X_2$"两个格子是空的。条件排序:在低 $X_1$ 组内部按组内中位数(2 与 3 之间)再分,股票 3、4 被贴上"高 $X_2$"标签——而独立排序把它们贴成"低 $X_2$"。同一只股票(如股票 3)在两种方案下进了不同格子。注意条件排序下,低 $X_1$ 组的"高 $X_2$"($X_2=3,4$)在绝对水平上低于高 $X_1$ 组的"低 $X_2$"($X_2=5,6$)——标签只在组内可比。

(3) 条件排序的"高 $X_2$"意思是"相对同 $X_1$ 水平的同伴而言 $X_2$ 高",即它排的实际上是 $X_2$ 中不能被 $X_1$ 解释的残差成分。这正是正交化:把 $X_2$ 对 $X_1$(非参数地)投影,只保留残差信息再排序。所以说条件双重排序是排序世界里的 Gram–Schmidt——第一排序变量扮演 $\boldsymbol{z}_0$,第二排序变量被它正交化后才参与定价检验;也因此第一变量只是控制变量,围绕它构建因子没有清晰含义。两种排序何时不同的一般判据:只要 $X_2$ 的组内分位数与全样本分位数有差异(即 $X_1$ 与 $X_2$ 相依),两种方案就会对边界附近的股票给出不同标签,相关性越强、分歧越大,直至独立排序出现空格子而条件排序永不会。

练习 2.5 证明 FWL:正交化残差的一元回归系数 = 多元回归系数 推导题

考虑二元回归 $\boldsymbol{y} = b_1 \boldsymbol{x}_1 + b_2 \boldsymbol{x}_2 + \boldsymbol{\varepsilon}$($\boldsymbol{x}_1, \boldsymbol{x}_2$ 不正交)。令 $\boldsymbol{z}_2 = \boldsymbol{x}_2 - \dfrac{\langle \boldsymbol{x}_1, \boldsymbol{x}_2 \rangle}{\langle \boldsymbol{x}_1, \boldsymbol{x}_1 \rangle} \boldsymbol{x}_1$ 为 $\boldsymbol{x}_2$ 对 $\boldsymbol{x}_1$ 正交化后的残差。请从 OLS 正规方程出发证明:多元回归的 $\hat{b}_2$ 恰好等于 $\dfrac{\langle \boldsymbol{z}_2, \boldsymbol{y} \rangle}{\langle \boldsymbol{z}_2, \boldsymbol{z}_2 \rangle}$。再用投影矩阵语言把结论推广到"任意多个控制变量"的情形。

提示

正规方程就是"残差与每个解释变量正交"(式 2.87)的两条分量。从第一条解出 $\hat{b}_1$(含 $\hat{b}_2$ 的表达式),代入第二条,整理出 $\hat{b}_2$ 的分子分母,再识别出它们分别是 $\langle \boldsymbol{z}_2,\boldsymbol{y}\rangle$ 与 $\langle \boldsymbol{z}_2,\boldsymbol{z}_2\rangle$。推广时使用 $\boldsymbol{M}_1 = \boldsymbol{I} - \boldsymbol{X}_1(\boldsymbol{X}_1^{\top}\boldsymbol{X}_1)^{-1}\boldsymbol{X}_1^{\top}$ 的对称幂等性质。

参考答案

二元情形。正规方程为 $\langle \boldsymbol{x}_1,\, \boldsymbol{y} - \hat{b}_1\boldsymbol{x}_1 - \hat{b}_2\boldsymbol{x}_2 \rangle = 0$ 与 $\langle \boldsymbol{x}_2,\, \boldsymbol{y} - \hat{b}_1\boldsymbol{x}_1 - \hat{b}_2\boldsymbol{x}_2 \rangle = 0$。由第一条:

$$ \hat{b}_1 = \frac{\langle \boldsymbol{x}_1, \boldsymbol{y} \rangle - \hat{b}_2 \langle \boldsymbol{x}_1, \boldsymbol{x}_2 \rangle}{\langle \boldsymbol{x}_1, \boldsymbol{x}_1 \rangle}. $$

代入第二条并整理:

$$ \underbrace{\langle \boldsymbol{x}_2, \boldsymbol{y} \rangle - \frac{\langle \boldsymbol{x}_1, \boldsymbol{x}_2 \rangle}{\langle \boldsymbol{x}_1, \boldsymbol{x}_1 \rangle} \langle \boldsymbol{x}_1, \boldsymbol{y} \rangle}_{=\ \langle \boldsymbol{z}_2,\, \boldsymbol{y} \rangle} \;=\; \hat{b}_2 \underbrace{\left[ \langle \boldsymbol{x}_2, \boldsymbol{x}_2 \rangle - \frac{\langle \boldsymbol{x}_1, \boldsymbol{x}_2 \rangle^2}{\langle \boldsymbol{x}_1, \boldsymbol{x}_1 \rangle} \right]}_{=\ \langle \boldsymbol{z}_2,\, \boldsymbol{z}_2 \rangle}. $$

花括号的识别:把 $\boldsymbol{z}_2$ 的定义代入 $\langle \boldsymbol{z}_2, \boldsymbol{y} \rangle$ 与 $\langle \boldsymbol{z}_2, \boldsymbol{z}_2 \rangle$ 展开即可核对(后者展开有三项,其中交叉项与投影项合并)。于是 $\hat{b}_2 = \langle \boldsymbol{z}_2, \boldsymbol{y} \rangle / \langle \boldsymbol{z}_2, \boldsymbol{z}_2 \rangle$,证毕。

一般情形。设 $\boldsymbol{y} = \boldsymbol{X}_1 \boldsymbol{b}_1 + b_2 \boldsymbol{x}_2 + \boldsymbol{\varepsilon}$,$\boldsymbol{X}_1$ 为任意一组控制变量。定义湮灭矩阵 $\boldsymbol{M}_1 = \boldsymbol{I} - \boldsymbol{X}_1 (\boldsymbol{X}_1^{\top}\boldsymbol{X}_1)^{-1} \boldsymbol{X}_1^{\top}$(对称、幂等:$\boldsymbol{M}_1^{\top}=\boldsymbol{M}_1=\boldsymbol{M}_1^2$)。分块正规方程消元后得分块回归公式:

$$ \hat{b}_2 = \big( \boldsymbol{x}_2^{\top} \boldsymbol{M}_1 \boldsymbol{x}_2 \big)^{-1} \boldsymbol{x}_2^{\top} \boldsymbol{M}_1 \boldsymbol{y} = \frac{\langle \boldsymbol{M}_1\boldsymbol{x}_2,\ \boldsymbol{y} \rangle}{\langle \boldsymbol{M}_1\boldsymbol{x}_2,\ \boldsymbol{M}_1\boldsymbol{x}_2 \rangle}, $$

其中第二个等号用了 $\boldsymbol{x}_2^{\top}\boldsymbol{M}_1 = (\boldsymbol{M}_1\boldsymbol{x}_2)^{\top}$ 与 $\boldsymbol{M}_1 = \boldsymbol{M}_1^{\top}\boldsymbol{M}_1$。而 $\boldsymbol{M}_1\boldsymbol{x}_2$ 正是 $\boldsymbol{x}_2$ 对全部控制变量回归后的残差——即连续正交化到最后一步的 $\boldsymbol{z}_K$。这就是 Frisch–Waugh–Lovell 定理:多元回归中任何变量的系数,等于"该变量被其余变量正交化后的残差"对 $\boldsymbol{y}$ 的一元回归系数(且对 $\boldsymbol{y}$ 是否也先正交化不敏感,因为 $\boldsymbol{M}_1$ 幂等)。它同时给出式 (2.94):$\Var(\hat{b}_2) = \sigma^2 / \lVert \boldsymbol{M}_1\boldsymbol{x}_2 \rVert^2$——共线性越强、残差越短、方差越大。

练习 2.6 为什么 Fama–MacBeth 天然处理截面相关,却处理不了时序相关 简答题

用公式论证以下两点,并给出一个会让 FM 标准误明显失真的现实场景与补救方案:(1)个股残差在同一期内任意相关,都不会使 FM 的标准误 $\mathrm{std}(\hat{\lambda}_t)/\sqrt{T}$ 失效;(2)一旦 $\hat{\lambda}_t$ 序列存在时序自相关,这个标准误就是错的,且通常错在低估。

参考答案

(1) 截面相关为何免疫。第 $t$ 期截面 OLS 给出 $\hat{\boldsymbol{\lambda}}_t = (\boldsymbol{X}^{\top}\boldsymbol{X})^{-1}\boldsymbol{X}^{\top}\boldsymbol{R}_t^e$——它是当期 $N$ 个资产收益的线性组合,把整个截面压缩成一个 $K{+}1$ 维统计量。资产之间无论怎样相关,其全部效果都体现在这个线性组合的取值波动里:$\Var(\hat{\boldsymbol{\lambda}}_t)$ 自动包含了 $\boldsymbol{R}_t^e$ 协方差矩阵的所有非对角元素。而 FM 的标准误不是从"残差独立"的截面公式推的,而是直接把 $\{\hat{\lambda}_{k,t}\}_{t=1}^{T}$ 当作 $T$ 次抽样、用其样本方差估计——样本方差量的就是这个"已折叠了截面相关"的总波动,不需要知道相关结构是什么。这就是"先估计、再均值"的全部妙处:把不可估的 $N\times N$ 截面相关问题,替换成可估的一维时序波动问题。

(2) 时序相关为何致命。$\Var(\hat{\lambda}) = \Var\big(\frac{1}{T}\sum_t \hat{\lambda}_t\big) = \frac{1}{T^2}\sum_t \sum_s \Cov(\hat{\lambda}_t, \hat{\lambda}_s)$。FM 用 $\mathrm{std}^2(\hat{\lambda}_t)/T$ 估它,等于只保留 $t=s$ 的对角项、默认全部跨期协方差为零。若 $\hat{\lambda}_t$ 有自相关 $\gamma_j \ne 0$,真实方差是 $\frac{1}{T}\big[\gamma_0 + 2\sum_{j\ge 1}(1-\frac{j}{T})\gamma_j\big]$(式 2.104);金融数据中 $\gamma_j$ 多为正,于是 FM 标准误系统性低估、t 值虚增。FM 框架内没有任何一步能"看到"跨期信息——每期回归都是独立进行的,均值和标准差的计算也不涉及排序信息——所以它对时序相关无能为力,这不是实现细节问题,是方法结构使然。

现实场景与补救。典型翻车场景:用重叠区间收益做被解释变量(如每月滚动计算未来 12 个月收益)——相邻两期的 $\hat{\lambda}_t$ 共享 11 个月的数据,自相关逼近 11/12,朴素 FM 标准误可低估至真实值的几分之一;动量/反转类因子收益自身的正自相关也是常见来源。补救:对 $\{\hat{\lambda}_t\}$ 序列按式 (2.66)–(2.67) 做 Newey–West 调整(把"求均值"当作对常数 1 的回归),重叠 $h$ 期时滞后阶数至少取到 $h$;或者干脆避免重叠区间设计。实践口诀:FM 负责截面,NW 负责时序,两个都要有