第 2 章 长记忆与 Hurst 指数核心概念 本章建立 DFA 所需的数学底座:什么是长记忆?Hurst 指数如何刻画标度?为什么 DFA 要对累积和做分析? 2.1 从白噪声到长记忆过程 2.1.1 白噪声(White Noise) 若增量序列 {x(t)} 独立同分布、均值为 0、方差有限,则: 自相关函数 ρ(k) ≈ 0(k > 0) Hurst 指数 H ≈ 0.5 累积和 Y(t) = Σ x(i) 的行为类似随机游走 白噪声是 DFA 的零假设基准:F(n) n^0.5。 2.1.
本章建立 DFA 所需的数学底座:什么是长记忆?Hurst 指数如何刻画标度?为什么 DFA 要对累积和做分析?
若增量序列 {x(t)} 独立同分布、均值为 0、方差有限,则:
白噪声是 DFA 的零假设基准:F(n) ~ n^0.5。
当自相关函数以幂律衰减:
[
\rho(k) \sim k^{-\gamma}, \quad 0 < \gamma < 1
]
序列具有长记忆: distant 过去仍对 present 有显著影响。
与 Hurst 指数的关系(高斯平稳过程):
[
H = \frac{1 + \gamma}{2}
]
| 过程类型 | H | 自相关 | 典型例子 |
|---|---|---|---|
| 白噪声 | ≈ 0.5 | 快速衰减 | 高频金融噪声 |
| 持久性 | (0.5, 1) | 缓慢正相关 | 河流流量、某些 EEG |
| 反持久性 | (0, 0.5) | 负相关 | 某些控制回路误差 |
fBm B_H(t) 是 H ∈ (0,1) 的连续高斯过程,满足:
[
\text{Var}[B_H(t) - B_H(s)] \sim |t - s|^{2H}
]
fBm 的增量(分数高斯噪声 fGn)是研究 DFA 的标准合成数据:理论 H 已知,可验证算法。
DFA 不直接对原始增量 {x(t)} 做分析,而是对积分/profile:
[
Y(t) = \sum_{i=1}^{t} [x(i) - \bar{x}]
]
原因有三:
fathon 中这一步由 fathonUtils.toAggregated 完成(第 8 章详解)。
在 DFA 框架下,窗口大小为 n 时,去趋势后的均方波动:
[
F(n) = \sqrt{\frac{1}{N_n} \sum_{\nu=1}^{N_n} \text{Var}[Y_\nu(i)]}
]
其中 Y_ν(i) 是第 ν 个窗口内去趋势后的 profile 残差。
标度律:
[
F(n) \sim n^H
]
在双对数坐标下,log F(n) 对 log n 的斜率 = H。
log F(n) │ ╱ H > 0.5 持久(斜率更陡) │ ╱ │ ╱──── H = 0.5 白噪声 │ ╱ │ ╱ H < 0.5 反持久(斜率更平) └──────────────── log n
| 维度 | R/S 分析 | DFA |
|---|---|---|
| 输入 | 原始序列或 profile | profile(累积和) |
| 趋势处理 | 全局均值 | 局部多项式去趋势 |
| 对多项式趋势的稳健性 | 较弱 | 较强 |
| 实现 | 较简单 | 稍复杂,fathon 已封装 |
| Hurst 估计 | 类似 | 类似(大样本下) |
实践建议:有明确多项式趋势(线性漂移、抛物线趋势)的序列优先用 DFA,并适当提高 polOrd(第 9 章)。
自相似(self-similarity):序列在不同时间尺度上统计性质相似。Hurst 指数是**单标度(monofractal)**参数——全序列用一个 H 描述。
当不同波动幅度对应不同标度指数时,序列是**多分形(multifractal)**的,需用 MFDFA(第 5 章)通过广义 Hurst h(q) 描述。
判断流程:
DFA 得到 H │ ├─ H 稳定、multiFit 各区间 H 接近 → 单标度,DFA 足够 │ └─ 不同 q / 不同尺度 H 差异大 → 多分形,转 MFDFA
下面用随机游走(理论 H = 1)和白噪声 profile(理论 H = 0.5)验证 fathon 输出。完整 fBm 生成较复杂,第 10 章介绍 Davies-Harte 等方法。
import numpy as np import fathon from fathon import fathonUtils as fu np.random.seed(123) N = 20000 wins = fu.linRangeByStep(10, N // 4) def estimate_H(increments, label, theory): profile = fu.toAggregated(increments) dfa = fathon.DFA(profile) n, F = dfa.computeFlucVec(wins, revSeg=True, polOrd=1) H, _ = dfa.fitFlucVec() err = abs(H - theory) print(f"{label:12s} H={H:.4f} 理论={theory} 误差={err:.4f}") return n, F, H # 白噪声增量 white = np.random.randn(N) estimate_H(white, "白噪声", 0.5) # 随机游走增量 = 白噪声的累积差分 rw = np.diff(np.cumsum(np.random.randn(N + 1))) estimate_H(rw, "随机游走", 1.0)
真实数据常含:
DFA 的局部去趋势(polOrd 参数)可去除窗口内的低阶多项式趋势。注意:
polOrd=1:去除线性趋势(最常用)polOrd=2:去除二次趋势| 领域 | 序列 | DFA 用途 |
|---|---|---|
| 金融 | 对数收益率、波动率 | 市场长记忆、风险标度 |
| 生理 | RR 间期、EEG | 心率变异性、脑状态 |
| 气候 | 温度、降水 | 气候 persistence |
| 工程 | 传感器噪声、网络流量 | 异常检测、容量规划 |
| 基因 | DNA _walk | 原始 DFA 应用场景 |
| 概念 | 要点 |
|---|---|
| 长记忆 | ρ(k) ~ k^{-γ},H = (1+γ)/2 |
| Profile | Y(t) = Σ[x(i) - mean(x)],DFA 的标准输入 |
| Hurst H | F(n) ~ n^H,双对数斜率 |
| 单标度 vs 多分形 | 单一 H vs h(q) 谱 |
| fathon 入口 | toAggregated → DFA → computeFlucVec → fitFlucVec |
np.cumsum(np.random.randn(N)) 的一阶差分作为增量,与直接白噪声对比 H。toAggregated?(提示:通常分析收益率增量。)本章建立的概念可以立刻用配套示例验证直觉(位于教程包的「配套示例」模块):
| 想验证的直觉 | 对应示例主题 |
|---|---|
| 白噪声 H ≈ 0.5,随机游走 H → 1 | 「白噪声与随机游走对比」示例 |
| profile 到底长什么样、toAggregated 在做什么 | 「工具函数与窗口设计」示例中的 profile 构造演示 |
| 用已知 H 的合成序列标定准确度 | 「分式布朗运动合成与标定」示例 |
💡 建议先运行「白噪声与随机游走对比」示例,肉眼对照双对数图,把「F(n) ~ n^H」从公式变成直觉。
下一章逐步推导 DFA 算法,对照 fathon 的 computeFlucVec 理解每一步在算什么。