在Stata中复制Fama-French RMW因子遇阻,求优化建议
优化Fama-French RMW因子相关性的建议(当前相关性0.909)
我正在复现Fama-French的营业利润因子(RMW),已经用Stata写了代码并得到结果,但自己生成的因子和官方公布的因子相关性只有约0.909。我已经花了好几周时间尝试优化,却没什么进展,希望能得到改进的方向和具体建议。
以下是我的代码片段:
***复制RMW*** use "compustat.dta" *处理优先股* gen ps = pstkrv replace ps = pstkl if ps == . replace ps = pstk if ps == .
可能的改进方向与建议
从我的经验来看,RMW因子相关性达不到完全匹配的情况,大多出在细节规则的处理上,这里给你几个具体的排查优化方向:
- 严格对齐样本筛选规则:Fama-French的RMW有明确的样本限制——只包含NYSE、AMEX、NASDAQ的非金融类股票(SIC代码避开6000-6999区间),同时要剔除股价低于5美元的个股,还要确保样本时间范围和官方因子完全一致。你可以先检查代码是否遗漏了这些筛选步骤,比如有没有误纳入金融股,或者没处理低价股的问题。
- 核对核心变量的计算细节:
官方RMW的营业利润公式是(revt - cogs - xsga - xint),注意不需要减去特殊项目(spi),这点很容易出错;另外账面权益的计算是at - lt - ps + (txditc if txditc != .),你要确认自己的账面权益计算是否完全遵循这个公式——账面权益的误差会直接影响营业利润/账面市值比的准确性,进而拉低因子相关性。 - 确认排序与分组的时间节点:RMW是每年6月底,用上一年度的年报数据对个股按营业利润/账面市值比排序;分组时需用NYSE股票的分位数确定阈值,再对全市场股票进行分组。你要检查自己是否在正确的时间点排序,有没有误用年末数据,或者分组阈值的确定范围不对。
- 检查因子构建的加权方式:官方RMW是市值加权的高营业利润组减去低营业利润组,如果你误用了等权加权,相关性肯定会出现偏差;另外还要确认加权时是否用的是分组时点的个股市值,有没有错用其他时间点的市值数据。
- 处理数据发布滞后性:Compustat的年报数据通常在次年2-4月才会发布,所以当年6月排序时必须用上一年度的年报数据,确保这些会计信息已经被市场消化。如果你的代码误用了还未发布的当期数据,也会导致因子偏差。
- 核对数据调整项:比如是否对Compustat数据做了通胀调整?或者是否处理了股票拆分、分红等事件对股价和市值的影响?这些细节也可能导致因子相关性的差异。
内容的提问来源于stack exchange,提问作者RegMontey
相关产品推荐
相关产品推荐

