一次筛十个因子,原始p值小于0.05为什么还不能直接保留
一次筛十个因子,不能看到某个原始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 | 因子 | 原始p | Holm逐级门槛 | BH逐级门槛 | Holm单调p | BH单调p | Holm拒绝 | BH拒绝 |
|---|---|---|---|---|---|---|---|---|
| 1 | F2 | 0.001 | 0.005 | 0.005 | 0.01 | 0.01 | 是 | 是 |
| 2 | F6 | 0.004 | 0.00555556 | 0.01 | 0.036 | 0.02 | 是 | 是 |
| 3 | F9 | 0.008 | 0.00625 | 0.015 | 0.064 | 0.02666667 | 否 | 是 |
| 4 | F4 | 0.014 | 0.00714286 | 0.02 | 0.098 | 0.035 | 否 | 是 |
| 5 | F8 | 0.021 | 0.00833333 | 0.025 | 0.126 | 0.042 | 否 | 是 |
| 6 | F1 | 0.032 | 0.01 | 0.03 | 0.16 | 0.05333333 | 否 | 否 |
| 7 | F5 | 0.049 | 0.0125 | 0.035 | 0.196 | 0.07 | 否 | 否 |
| 8 | F10 | 0.07 | 0.01666667 | 0.04 | 0.21 | 0.0875 | 否 | 否 |
| 9 | F3 | 0.2 | 0.025 | 0.045 | 0.4 | 0.22222222 | 否 | 否 |
| 10 | F7 | 0.8 | 0.05 | 0.05 | 0.8 | 0.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校正p | BH校正p | Holm拒绝 | BH拒绝 |
|---|---|---|---|---|---|---|
| F1 | 0.032 | 6 | 0.16 | 0.05333333 | 否 | 否 |
| F2 | 0.001 | 1 | 0.01 | 0.01 | 是 | 是 |
| F3 | 0.2 | 9 | 0.4 | 0.22222222 | 否 | 否 |
| F4 | 0.014 | 4 | 0.098 | 0.035 | 否 | 是 |
| F5 | 0.049 | 7 | 0.196 | 0.07 | 否 | 否 |
| F6 | 0.004 | 2 | 0.036 | 0.02 | 是 | 是 |
| F7 | 0.8 | 10 | 0.8 | 0.8 | 否 | 否 |
| F8 | 0.021 | 5 | 0.126 | 0.042 | 否 | 是 |
| F9 | 0.008 | 3 | 0.064 | 0.02666667 | 否 | 是 |
| F10 | 0.07 | 8 | 0.21 | 0.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 |
|---|---|
| F2 | 0.02928968 |
| F6 | 0.05857937 |
| F9 | 0.07810582 |
| F4 | 0.10251389 |
| F8 | 0.12301667 |
| F1 | 0.15621164 |
| F5 | 0.20502778 |
| F10 | 0.25628472 |
| F3 | 0.65088183 |
| F7 | 1 |
怎样核对程序和缺字段
核对时先确认十项都在零到一且身份唯一,缺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标准库运行,数据不是实际用户记录。