← 返回文章库

一次筛十个因子,原始p值小于0.05为什么还不能直接保留

2026-10-24 · L5

一次筛十个因子,不能看到某个原始p值小于0.05就直接保留。先冻结同一研究家族的全部假设和有效原始p值,再根据要控制的错误类型选择程序:Holm控制至少一个假阳性的家族错误率,BH控制拒绝结果中假发现比例的期望。本页对同一十项输入逐级计算,展示门槛、单调修正以及还原原顺序。

家族和原始p值必须先说清

构造十个因子F1至F10,原始p值依次为0.032、0.001、0.20、0.014、0.049、0.004、0.80、0.021、0.008、0.07。它们是为演示校正算法给定的输入,不是从真实股票或IC样本估计的结果。每项检验假设都对应事先定义的零效应,原始p值已经假定由合理的单项检验产生;若单项检验忽略时间相关或选择过程,后续多重校正不能修好它。

这个家族只包含本次预先登记的十项,没有临时排除“不像同类”的失败因子。如果实际研究先试了一百种定义,只报告十个最好p值,用十作分母仍漏掉大量选择。家族应覆盖哪些市场、窗口、标签和预处理版本,需要在看结果前写明,不能用一套机械公式替代研究台账。

下表按p值升序排序,保留因子身份。Holm门槛为alpha/(m-r+1),BH门槛为r*q/m,alpha与q都设0.05,m为十,r从一到十。表中拒绝与否按完整逐级算法判断,不是把每行独立比较后简单拼在一起。

排序r因子原始pHolm逐级门槛BH逐级门槛Holm单调pBH单调pHolm拒绝BH拒绝
1F20.0010.0050.0050.010.01是是
2F60.0040.005555560.010.0360.02是是
3F90.0080.006250.0150.0640.02666667否是
4F40.0140.007142860.020.0980.035否是
5F80.0210.008333330.0250.1260.042否是
6F10.0320.010.030.160.05333333否否
7F50.0490.01250.0350.1960.07否否
8F100.070.016666670.040.210.0875否否
9F30.20.0250.0450.40.22222222否否
10F70.80.050.050.80.8否否

Holm从小到大,失败以后停止

最小p值F2为0.001,小于第一门槛0.005;F6为0.004,小于第二门槛约0.00555556。第三个F9为0.008,却大于第三门槛0.00625,于是从第三项起全部不拒绝。不能因为后面门槛逐渐放宽,再重新寻找可以单独通过的一项。逐步下降程序的“停止”本身就是规则的一部分。

Holm校正p先算(m-r+1)*p_(r),再从第一项到当前项取累计最大值,最后不超过一。这样可保证排序后的校正值不下降。得到F2为0.01、F6为0.036、F9为0.064。用任一预设alpha与校正p比较,会与逐级停止相同;如果程序只逐行乘倍数却没有累计最大,某些输入会违反这一等价性。

Holm在单项p值有效的前提下不要求检验之间独立,家族错误率控制通常可承受任意依赖。这里的“有效”需要真零假设下p值具有相应的保守或均匀性质,不能拿随意构造的评分硬贴p值名字。本文给出的数字仅用来检验排序和修正运算,没有验证真实统计模型。

BH从最大的合格排序点回填

BH先找满足p_(r)小于等于r*q/m的最大r。本例第五项F8的0.021小于0.025,第六项F1的0.032却大于0.03,后面也没有更大的合格点,所以拒绝前五项:F2、F6、F9、F4、F8。BH不是碰到第一次失败就停止,那是把它错误写成另一种程序;必须寻找最大的合格位置再回填所有更小p值。

BH校正p先算m*p_(r)/r,再从末项往前取累计最小值,并截到一。表里显示校正后F4为0.035、F8为0.042,F1约0.05333333。反向累计保证校正p仍按排序非递减。最终输出要恢复F1至F10身份顺序,不能把排序后的数字直接写回原始因子行。

原因子顺序原始p在排序中的位置Holm校正pBH校正pHolm拒绝BH拒绝
F10.03260.160.05333333否否
F20.00110.010.01是是
F30.290.40.22222222否否
F40.01440.0980.035否是
F50.04970.1960.07否否
F60.00420.0360.02是是
F70.8100.80.8否否
F80.02150.1260.042否是
F90.00830.0640.02666667否是
F100.0780.210.0875否否

两种错误控制目标为什么不能互换

原始逐项0.05会拒绝七个;Holm拒绝两个;BH拒绝五个。不能据此说BH更聪明或Holm更准确,它们允许的错误目标不同。FWER关注整组出现至少一个错误拒绝的概率;FDR关注V/max(R,1)的期望,其中V是假拒绝数,R是总拒绝数。FDR为0.05不表示每个被选中因子有百分之九十五概率为真,也不保证当前这一次十项里假发现比例刚好不超过百分之五。

BH的经典保证需要独立,或真零假设统计量满足PRDS等适当正依赖条件。不能把“因子相关矩阵里很多格为正”当成已经验证了这种条件;复杂筛选、相同股票样本与标签重叠可能产生更复杂依赖。若缺乏相应依据,可考虑控制目标相符的更保守程序,而不是直接宣称BH适用于任意金融因子库。

作为条件改变对照,BY将BH校正p再乘调和数H_10约2.92896825并截到一,在有效p值下用于更一般依赖结构。下表让读者看见代价,但没有要求在看到结果以后改选能留下最多因子的方案;控制目标和依赖处理方式应事先决定。

排序身份BY校正p
F20.02928968
F60.05857937
F90.07810582
F40.10251389
F80.12301667
F10.15621164
F50.20502778
F100.25628472
F30.65088183
F71

怎样核对程序和缺字段

核对时先确认十项都在零到一且身份唯一,缺p值不能自动填零;若将失败运行当作缺失后删除,也可能缩小家族。接着检查排序长度不变、原顺序还原后每个身份只出现一次。分别手算最小两项、Holm停止点和BH最大合格点,再核对两种校正数组都非递减。这些检查能发现排序错位和方向写反,却不能验证原始p值的科学合理性。

statsmodels多重检验文档列出Holm与BH等程序及返回原顺序的约定,FDR专页说明依赖范围与BH反向单调修正。本文用标准库显式实现这些运算,没有调用库,也不把通过校正等同于因子有交易价值。真实研究仍需独立时间验证、成本与选择台账,不能从十个p值推导未来盈利确定性。

相等p值和门槛相等怎样处理

本次输入没有完全相等的p值,但扩展程序时仍要固定并列排序身份。两项同p值可以按因子编号稳定排序,单调修正后的结论不应因输入行顺序改变而不同;若发生不同,应检查累计方向或还原索引。程序使用小于等于门槛作为拒绝规则,与正文一致,不能显示四舍五入到0.05后再重新判定。零p值也需要核查是否只是数值下溢,精度不足的输出不等于原假设概率严格为零。

对家族中的运行失败,应区分尚未产生有效p值与已产生较大p值。前者需要按预登记政策补齐或说明未完成,后者必须保留。算法表的十行只是完整性检查的起点,研究者仍需说明为什么这十个身份构成当前家族,以及还有哪些探索性尝试没有获得确认性检验资格。

继续核对研究流程时,可回到时序交叉验证母题;遇到相邻任务,再分别查看时间序列块bootstrap置信区间、折减夏普试验次数。本文的滚动验证工具链接仅作基础流程说明,新增审计和统计计算由本页独立表格与模型交付。

道积君编辑组,AI辅助编写与核算。本文为构造教学实验,来源说明方法,数字由明示输入计算,不代表真实策略、收益预测或统计审定。

复算资料

本篇编号DJ4-062。下载Python复算脚本(文本)与构造输入输出JSON,按编号核对本篇。脚本改存为.py后可用Python标准库运行,数据不是实际用户记录。

这个页面有问题?

提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。