跳转至

Fama–MacBeth 回归

定义

每个时期做一次截面回归,再把这些时期的斜率当成一个时间序列,用它的均值和标准误做推断。

公式

\[ \hat\lambda=\frac{1}{T}\sum_{t=1}^{T}\hat\lambda_t,\qquad \mathrm{se}(\hat\lambda)=\frac{\sigma(\hat\lambda_t)}{\sqrt{T}} \]

截面上的残差相关被「先每期一个斜率」吸收掉一部分。斜率自己在时间上相关时,还要 Newey–West,不能停在独立同分布的标准误。

直觉

你不是把所有股票所有月份堆成一个大回归。你是在问:这个月横截面上的斜率,下个月还像不像。

实务要点 / 常见误区

  • 先形成暴露,再用下一期收益。当期收益进回归是前视。
  • 标准误若把各期斜率当独立,自相关为正时会偏小。
  • 一个显著的平均斜率不是组合扣费后的收益。

相关概念

代码

import math

def fama_macbeth(slopes: list[float]) -> tuple[float, float]:
    # slopes 已经是各期截面回归的系数。这里只对这条时间序列做均值和 t。
    n = len(slopes)
    mean = sum(slopes) / n
    var = sum((x - mean) ** 2 for x in slopes) / (n - 1)
    t_stat = mean / math.sqrt(var / n)
    return mean, t_stat

教材:M06 因子研究方法论