/** * 截面因子评估(纯函数、零依赖)—— dsh-alpha 域扩展。 * * 背景:上游 `factorEvaluate` 的文档建议「多资产截面:把截面按时间摊平为 * 序列后传入」,但该用法在数学上不成立:`lagPair` 会把 factor[i] 与 * forwardReturns[i+1] 错位配对,摊平后等于拿「不同资产、不同时点」的样本 * 交叉配对,IC 完全失真(且静默、不报错)。 * * 本模块提供正确的截面口径:**每个时点在各资产之间做一次横截面相关**, * 再对时间序列上的 IC 求均值/标准差(即业界标准 IC / ICIR / t 值)。 * * 约定(与上游对齐契约一致): * - `factor[t][a]` 与 `forwardReturns[t][a]` 在同一时点 t 对齐; * `forwardReturns[t][a]` 表示资产 a 从 t 到 t+1 的收益(由调用方保证,无未来函数)。 * - 缺失值用 `null` 表示(NaN/Infinity 不可达);该时点资产数不足 minAssets 时跳过。 * - 所有导出均为纯函数,isConcurrencySafe 语义成立。 */ /** 单个时点的截面结果。 */ export interface CrossSectionPoint { /** 时点索引(0-based,对应输入矩阵的行号) */ period: number; /** 该时点的截面 Pearson IC */ ic: number; /** 该时点的截面 Spearman RankIC */ rankIc: number; /** 该时点参与计算的资产数 */ assets: number; } /** 截面因子评估结果。 */ export interface CrossSectionEval { /** IC 时间序列均值(核心指标) */ meanIc: number; /** IC 时间序列标准差 */ icStd: number; /** ICIR = meanIc / icStd(IC 的稳定性,越高越稳定) */ icir: number; /** IC 的 t 统计量 = meanIc / (icStd / sqrt(n)),用于显著性判断 */ icTStat: number; /** 正 IC 占比 %(方向一致性) */ icPositiveRate: number; /** RankIC 均值 */ meanRankIc: number; /** 逐时点明细(跳过样本不足的时点) */ series: CrossSectionPoint[]; /** 有效时点数 */ periods: number; } /** * 逐时点截面因子评估。 * * @param factorMatrix - 因子矩阵 [时点][资产],缺失用 null。 * @param forwardReturns - 未来收益矩阵 [时点][资产],与 factorMatrix 同形。 * @param minAssets - 单个截面至少需要的资产数(默认 5,不足则跳过该时点)。 * @returns 截面 IC / ICIR / t 值 / 逐时点明细。 */ export declare function factorEvaluateCrossSection(factorMatrix: readonly (readonly (number | null)[])[], forwardReturns: readonly (readonly (number | null)[])[], minAssets?: number): CrossSectionEval;