附录 C 常见报错与排查
按现象快速定位原因与修复。详细原理见对应章节。
C.1 安装与环境
| 现象 |
可能原因 |
处理 |
pip install fathon 失败 |
无 wheel、缺编译器 |
升级 pip;Windows 装 VS Build Tools;macOS ARM 用 brew llvm+gsl 本地编译 |
ImportError: No module named fathon |
未安装或虚拟环境错误 |
确认 pip show fathon 与 Python 解释器一致 |
ImportError: DLL load failed (Windows) |
缺少 VC 运行库 |
安装 Microsoft Visual C++ Redistributable |
| NumPy 版本警告 |
Python 3.12+ 需 numpy≥1.26.2 |
pip install -U numpy |
| macOS ARM 无 wheel |
官方未提供 ARM64 包 |
本地 pip install . 编译 |
C.2 运行时错误
| 现象 |
可能原因 |
处理 |
| 序列长度不一致 (DCCA/MFDCCA) |
两条 profile 长度不同 |
对齐截断或插值 |
| 空序列 / 长度过短 |
L < n_min |
增加数据或减小 wins |
computeFlucVec 后 fitFlucVec 报错 |
未先 computeFlucVec |
严格按 API 顺序调用 |
| 窗口数组为空 |
n_min > n_max 或 step 过大 |
检查 linRange 参数 |
| 内存 Error |
MFDFA wins×q×L 过大 |
减少 wins/q 点数或缩短序列 |
C.3 结果异常(无报错但 H 不合理)
| 现象 |
可能原因 |
处理 |
| H ≈ 1.0 或极高 |
对价格而非增量做 DFA |
改用收益率/差分后 toAggregated |
| H ≈ 0 或负值 |
窗口/拟合区间错误 |
检查 nStart/nEnd;扩大标度区间 |
| H 每次运行差异大 |
序列太短 |
L≥2000;bootstrap 看置信区间 |
| H 对 polOrd 极敏感 |
趋势与记忆混淆 |
试 polOrd=1,2;检查预处理 |
| MFDFA h(q) 剧烈震荡 |
q 范围过大或 wins 不足 |
缩小 q;增加 wins 密度 |
| MFDFA q<0 处 NaN |
小波动为零 |
减小 |q|;检查 profile 是否常数段 |
| DCCA ρ 全为 0 |
wins 过大或 absVals 影响 |
缩小 wins_rho;对比 absVals |
| HT 输出全 NaN |
L 太短或 scales 过大 |
scales ≤ L/10;增加序列长度 |
| q0Fit 后 HT 异常 |
logBase 非 e |
q0Fit 必须来自 logBase=e 的 fit |
C.4 F(n) 曲线形状诊断
| 曲线形状 |
可能含义 |
建议 |
| 双对数整体线性 |
单标度,DFA 适用 |
报告 H |
| 小 n 上翘 |
离散效应 |
fitFlucVec 增大 nStart |
| 大 n 下弯 |
分段不足或非平稳 |
减小 nEnd;试 multiFit |
| S 形 |
多重标度或多分形 |
MFDFA + multiFitFlucVec |
| 水平(F 不随 n 变) |
序列无标度或常数 |
检查输入是否为常数/过短 |
C.5 性能问题
| 现象 |
原因 |
处理 |
| computeFlucVec 很慢 |
wins 步长 1 且 L 大 |
step=10 或 powRangeByCount |
| MFDFA 卡住 |
|q|×|wins| 过大 |
粗调 q 步长 0.5 |
| HT 极慢 |
多 scales + 长 L |
减少 scales;用 q0Fit |
| CPU 未占满 |
短序列开销小 |
正常;长序列 OpenMP 生效 |
C.6 平台特定
| 平台 |
问题 |
处理 |
| Windows |
OpenMP 与某些 IDE 调试冲突 |
Release 模式运行 |
| macOS x86_64 |
正常 wheel |
— |
| macOS ARM64 |
需源码编译 |
brew install llvm gsl |
| Linux ARM |
wheel 可用 |
正常 pip install |
C.7 数据预处理排查清单
□ 序列是一维 ndarray/list
□ 无 NaN/Inf(或已插值)
□ 金融数据已转为收益率
□ 已调用 toAggregated
□ 两条序列(DCCA)等长
□ L 与 wins 满足 n_max ≤ L/4
□ 短序列 L<1000 考虑 unbiased=True
C.8 调试技巧
打印中间量
n, F = dfa.computeFlucVec(wins, revSeg=True)
print("n range:", n[0], n[-1], "count:", len(n))
print("F range:", F.min(), F.max())
print("log-log slope manual:", np.polyfit(np.log(n), np.log(F), 1)[0])
与 DFA 对照 MFDFA h(2)
# 若 H 与 h(2) 差 > 0.05,检查 q 列表是否含 2 及 wins 是否一致
可视化 F(n)
双对数图目视线性区间,再设置 nStart/nEnd(见第 9 章)。
C.9 获取帮助
| 渠道 |
用途 |
| fathon ReadTheDocs |
API 官方文档 |
| GitHub Issues |
Bug 报告 |
| JOSS 论文 |
算法引用与概述 |
C.10 快速索引 → 章节
| 问题类型 |
详见 |
| 安装 |
第 1 章 |
| H 含义 |
第 2 章 |
| polOrd / revSeg |
第 3、9 章 |
| wins 设计 |
第 8 章 |
| MFDFA NaN |
第 5 章 |
| DCCA 置信区间 |
第 6 章 |
| HT q0Fit |
第 7 章 |
| 发表级绘图 |
第 9 章 |