第 0 章 项目导览与学习路线 在写任何一行代码之前,先回答三个问题:DFA 是什么?fathon 帮你算什么?这套教程怎么读? 0.1 DFA 与 fathon 是什么 去趋势波动分析(Detrended Fluctuation Analysis, DFA) 是一种研究时间序列长记忆(long memory)与自相似标度的非参数方法。它由 Peng 等人于 1990 年代提出,最初用于 DNA 序列分析,如今广泛应用于金融收益率、心率变异性、气候数据、脑电信号等领域。 核心思想可以概括为四步: Hurst 指数 H 是 DFA 最重要的输出: H 范围 | 典型解释 H ≈ 0.5 | 类似白噪声,无长记忆 0.
在写任何一行代码之前,先回答三个问题:DFA 是什么?fathon 帮你算什么?这套教程怎么读?
去趋势波动分析(Detrended Fluctuation Analysis, DFA) 是一种研究时间序列长记忆(long memory)与自相似标度的非参数方法。它由 Peng 等人于 1990 年代提出,最初用于 DNA 序列分析,如今广泛应用于金融收益率、心率变异性、气候数据、脑电信号等领域。
核心思想可以概括为四步:
原始增量序列 x(t) │ ▼ 零均值累积和 Y(t) = Σ[x(i) - mean(x)] │ ▼ 按窗口 n 分段,每段拟合并去除局部趋势(多项式) │ ▼ 计算去趋势后的均方波动 F(n) │ ▼ log F(n) ~ H·log n → Hurst 指数 H
Hurst 指数 H 是 DFA 最重要的输出:
| H 范围 | 典型解释 |
|---|---|
| H ≈ 0.5 | 类似白噪声,无长记忆 |
| 0.5 < H < 1 | 持久性(persistent):大波动倾向跟随大波动 |
| 0 < H < 0.5 | 反持久性(anti-persistent):大波动倾向跟随小波动 |
fathon 是 Stefano Bianchi 开发的 Python 包(JOSS 2020),用 Cython/C 实现核心计算,提供五种算法:
| 类 | 全称 | 用途 |
|---|---|---|
DFA |
Detrended Fluctuation Analysis | 单序列 Hurst 指数 |
MFDFA |
Multifractal DFA | 单序列广义 Hurst h(q)、多分形谱 |
DCCA |
Detrended Cross-Correlation Analysis | 双序列交叉标度、ρ_DCCA |
MFDCCA |
Multifractal DCCA | 双序列多分形交叉相关 |
HT |
Time-dependent Hurst exponent | 时变局部 Hurst |
┌─────────────────────────────────────────────────────────────┐ │ fathon 能力全景 │ ├──────────┬──────────┬──────────┬──────────┬─────────────────┤ │ DFA │ MFDFA │ DCCA │ MFDCCA │ HT │ │ 单序列 H │ h(q)谱 │ 双序列 H │ 双序列 │ 局部时变 H │ │ │ f(α) │ ρ_DCCA │ h(q) │ │ ├──────────┴──────────┴──────────┴──────────┴─────────────────┤ │ fathonUtils:toAggregated / linRangeByStep / saveObject │ └─────────────────────────────────────────────────────────────┘
| 类别 | 选型 | 作用 |
|---|---|---|
| 核心计算 | fathon(Cython + GSL) | DFA / MFDFA / DCCA / MFDCCA / HT |
| 数值基础 | NumPy | 时序数组、窗口向量 |
| 可视化 | Matplotlib | F(n) 双对数图、多分形谱 |
| 可选数据 | 自建合成序列 / 公开金融·生理数据集 | 实验与验证 |
平台支持(v1.3.3):Linux x86_64/ARM64、macOS x86_64、Windows 64bit 均有 wheel;Apple Silicon 需本地编译(详见第 1 章)。
| 能力 | 对应章节 |
|---|---|
| 理解长记忆、Hurst 指数、累积和 profile | 第 2 章 |
| 搞懂 DFA 五步算法与 F(n) 的数学含义 | 第 3 章 |
用 DFA 计算 Hurst、解读 log-log 拟合 |
第 4 章 |
用 MFDFA 得到 h(q)、τ(q)、f(α) 谱 |
第 5 章 |
用 DCCA/MFDCCA 分析两序列交叉相关 |
第 6 章 |
用 HT 追踪时变 Hurst |
第 7 章 |
| 正确选择窗口、多项式阶数、q 列表 | 第 8 章 |
| 短序列、无偏 DFA、置信区间等工程细节 | 第 9 章 |
| 与 R/S 分析、MFDFA 其他实现对比 | 第 10 章 |
第 0 章(本章)→ 第 1 章 → 第 2 章(速读)→ 第 4 章 → 第 9 章(参数部分)
第 0~4 章 → 第 5 章 → 第 6 章 → 第 7 章 → 第 8 章 → 第 9 章
路线 B 全部 → 第 10 章 → 附录 A/B → 对照原始论文验证合成数据
时间序列标度分析 │ ┌─────────────────┼─────────────────┐ ▼ ▼ ▼ R/S 分析 DFA 小波方法 (经典 Hurst) (去趋势更稳健) (时频局部化) │ │ └────────┬────────┘ ▼ MFDFA / MFDCCA (多分形、变标度) │ ▼ HT (时变 Hurst, Ihlen 2012)
DFA 相对 R/S 分析的优势在于:对多项式趋势更稳健(通过局部去趋势消除全局趋势影响)。MFDFA 进一步揭示序列是否在不同波动幅度上具有不同标度指数——即多分形性。
在继续阅读前,用下面代码建立直觉(无需深入理解,第 2~3 章会展开):
import numpy as np import fathon from fathon import fathonUtils as fu np.random.seed(0) # 白噪声:期望 H ≈ 0.5 white = fu.toAggregated(np.random.randn(8000)) wins = fu.linRangeByStep(10, 2000) for label, ts in [("白噪声", white)]: dfa = fathon.DFA(ts) n, F = dfa.computeFlucVec(wins, revSeg=True) H, _ = dfa.fitFlucVec() print(f"{label}: H = {H:.3f} (理论 ≈ 0.5)")
若输出 H 在 0.45~0.55 附近,说明环境正常。持久性序列的实验见第 1 章完整示例。
| 下一章 | 内容 |
|---|---|
| 第 1 章 | 安装 fathon、首次完整 DFA 流程、F(n) 可视化 |
| 第 2 章 | 长记忆、自相似、Hurst 指数的物理含义 |
| 第 3 章 | DFA 算法逐步推导与实现细节 |
引用 fathon 时请标注:Bianchi, S. (2020). fathon: A Python package for a fast computation of detrended fluctuation analysis and related algorithms. Journal of Open Source Software, 5(45), 1828.(DOI: 10.21105/joss.01828,可在学术搜索引擎检索该 DOI 获取全文。)