因子投资-实验04-实现FamaMacBeth回归
实现一个最小 Fama–MacBeth 特征回归:第一阶段每月对股票横截面做 OLS,第二阶段对月度系数求时间均值,并用 Newey–West 标准误做推断。
问题
实现一个最小 Fama–MacBeth 特征回归:第一阶段每月对股票横截面做 OLS,第二阶段对月度系数求时间均值,并用 Newey–West 标准误做推断。
最终接口:
fama_macbeth(frame, y, xs) → pd.DataFrame
返回每个系数的 mean、hac_se、t_stat 和月份数;月度系数保存在返回表的 attrs 中,便于诊断。
输入数据
使用 8 个月、每月 6 只股票。两个当期特征是 size 和 value,未来一期收益 future_return 按以下过程生成:
size 风险价格的 8 个月真值均值为 1%,value 为 0.5%。噪声被构造成与当月常数、size、value 三列正交,因此每月 OLS 能精确恢复生成系数;这只用于测试代数实现。
真实输入长表至少包含 return_date、asset、future_return 和所有 x;信号形成日期应另列,并断言早于 return_date。本实验省略交易实现,只检验回归。
逐步实现
1. 每月独立横截面回归
1 | |
一月有 N 个股票观测,得到一组当月 λ。每个月重新估计允许风险价格随时间变化,也避免把股票数量误当作时间证据。
2. 对月度系数做均值回归
1 | |
只对常数回归的系数就是时间均值;HAC bse 是该均值在允许有限自相关下的标准误。lags 必须由持有期和误差结构决定。
3. 保存中间结果
最终表只含摘要会隐藏不稳定月份。将 monthly 放在 attrs,实际研究还应落盘保存每月股票数、R²、条件数、缺失比例和分位数。
完整代码
1 | |
预期输出
核心均值:
| variable | mean | n_months |
|---|---|---|
| const | 0.002 | 8 |
| size | 0.010 | 8 |
| value | 0.005 | 8 |
每月 size、value 系数应分别与代码中的 lambda_size、lambda_value 相同。hac_se 和 t_stat 由这 8 个时间值及 maxlags=1 决定。8 个月样本过短,数值只验证算法,不应解释为经济证据。
断言
- return_date、asset 联合唯一。
- 必需字段无缺失。
- 每月股票数大于回归系数数,避免零残差自由度。
- 函数第一月系数与直接 statsmodels OLS 完全一致。
- 第二阶段均值等于生成时 λ 的算术平均。
- 每个摘要系数使用恰好 8 个月。
真实点时研究应再加入 signal_date<return_date、每月秩、条件数、极端杠杆点、行业覆盖和股票池变化断言。
结果解释
第一阶段回答:“在这个月的股票横截面中,size 或 value 增加一个单位,对应多少未来收益差?”第二阶段回答:“这种月度关系的时间平均是否稳定偏离零?”
Fama–MacBeth 的有效时间证据主要来自 8 个月,而不是 48 个股票月份。股票数增加能提高每月截面系数精度,却不能把共同宏观冲击复制成独立月份。
本例直接使用可观察特征。如果 x 是第一步时序回归估出的 Beta,第二步还会继承 Beta 的测量误差,需要 Shanken 型修正、联合估计或与设计匹配的自助法。
HAC 只改变第二阶段均值的标准误,不改变月度系数或均值。若通过调整 maxlags 来最大化 t 值,推断已经被研究者选择污染。
常见故障
- 把 return_date 当信号日,导致 future_return 与特征同期或反向错位。
- 全部股票月份池化 OLS 后用普通标准误。
- 某月股票数过少、特征常数或高度共线,仍保留无意义系数。
- 每月标准化使用全样本均值和标准差。
- 缺失值按未来是否有收益决定删除。
- Newey–West 滞后未经说明,或根据结果反复改变。
- 只保存摘要,无法检查系数是否由单个极端月份驱动。
- 把特征斜率直接叫风险溢价,没有证明特征代表可定价暴露。
练习
- 把 lambda_size 后四个月全部设为负,观察全样本均值怎样掩盖结构变化。
- 将持有期改为 3 个月并构造重叠收益,比较 maxlags=0、2、6 的标准误。
- 某个月把 value 设为 size 的两倍,添加条件数检查让函数失败。
- 在每月先对 size、value 做当期 z-score,解释系数单位变化。
- 加入行业哑变量,说明 const、特征系数和自由度如何变化。
- 用两维聚类面板回归做对照,解释它和 Fama–MacBeth 各允许什么相关结构。